Arduino, sensorer och MIDI- (5 / 16 steg)

Steg 5: Utlösa en MIDI-not med en knapp



Med hjälp av enkel knapp debounce kod från första klass (du kan också använda denna debounce kod som använder millis() för att hålla tid), tråd upp en knapp till digital stift 7 och använda den för att utlösa en MIDI-not:

byte noteON = 144; //note på kommando

int buttonPin = 7.
booleska currentState = låg, //stroage för aktuella knappläge
booleska lastState = låg, //storage för sista knappen stat

void setup() {
pinMode (buttonPin, ingång); //this tid vi kommer att ange PIN-koden som indata
Serial.BEGIN (9600); //initialize seriell anslutning
}

void loop() {
currentState = digitalRead(buttonPin);
om (currentState == hög & & lastState == låg) {//if-knappen bara har tryckt
MIDImessage (noteON, 60, 127); //turn not 60 på med 127 hastighet
fördröjning (2), //crude form av knappen debouncing
} else om (currentState == låg & & lastState == hög) {
MIDImessage (noteON, 60, 0); //turn not 60 off
fördröjning (2), //crude form av knappen debouncing
}
lastState = currentState;
}

skicka MIDI-meddelande
void MIDImessage (byte kommando, byte data1, byte data2) {
Serial.write(Command);
Serial.write(Data1);
Serial.write(data2);
}

Varje gång knappen trycks vi skicka en anteckning på meddelande i denna skiss, och varje gång knappen släpps, vi skicka en anteckning av meddelande. Nu prova att lägga i potentiometern (ansluten till A0) för att styra tonhöjden för anteckningen:

byte noteON = 144; //note på kommando
byte Obs; //storage för spelar Obs

int buttonPin = 7.
int potPin = A0;
booleska currentState = låg, //stroage för aktuella knappläge
booleska lastState = låg, //storage för sista knappen stat

void setup() {
pinMode (buttonPin, ingång); //this tid vi kommer att ange PIN-koden som indata
Serial.BEGIN (9600); //initialize seriell anslutning
}

void loop() {
currentState = digitalRead(buttonPin);

om (currentState == hög & & lastState == låg) {//if-knappen bara har tryckt

int currentPotVal = analogRead(potPin);
Obs = karta (currentPotVal, 0, 1023, 0, 127);

MIDImessage (noteON, Obs, 127); //turn anteckning på med 127 hastighet
fördröjning (2), //crude form av knappen debouncing
} else om (currentState == låg & & lastState == hög) {
MIDImessage (noteON, Obs, 0); //turn anmärkning av
fördröjning (2), //crude form av knappen debouncing
}
lastState = currentState;
}

skicka MIDI-meddelande
void MIDImessage (byte kommando, byte data1, byte data2) {
Serial.write(Command);
Serial.write(Data1);
Serial.write(data2);
}

Nu kan vi lägga till några fler anteckningar i mixen, spelar denna skiss en tre Obs fras på varje knapptryckning. Du kan ändra basnot med potentiometern:

byte noteON = 144; //note på kommando
byte Obs; //storage för spelar Obs

int buttonPin = 7.
int potPin = A0;
booleska currentState = låg, //stroage för aktuella knappläge
booleska lastState = låg, //storage för sista knappen stat

void setup() {
pinMode (buttonPin, ingång); //this tid vi kommer att ange PIN-koden som indata
Serial.BEGIN (9600); //initialize seriell anslutning
}

void loop() {
currentState = digitalRead(buttonPin);

om (currentState == hög & & lastState == låg) {//if-knappen bara har tryckt

int currentPotVal = analogRead(potPin);
Obs = karta (currentPotVal, 0, 1023, 0, 127);
int noteLength = 200.
byte noteVelocity = 127;

MIDImessage (noteON, Obs, noteVelocity); //base anmärkning
Delay(noteLength);
MIDImessage (noteON, Obs, 0); //turn anmärkning av
MIDImessage (noteON, notera + 7, noteVelocity), //fifth
Delay(noteLength);
MIDImessage (noteON, Obs + 7, 0); //turn anmärkning av
MIDImessage (noteON, notera + 12, noteVelocity), //octave
Delay(noteLength);
MIDImessage (noteON, Obs + 12, 0);
}

lastState = currentState;
}

skicka MIDI-meddelande
void MIDImessage (byte kommando, byte data1, byte data2) {
Serial.write(Command);
Serial.write(Data1);
Serial.write(data2);
}

Slutligen kan vi använda en medan slinga för att fortsätta arpeggio som vi trycker på knappen. Medan loopar är i princip loopable om uttalanden. Om argumentet inuti while loop är parenteser utvärderas till sant, då kommandoexekveringar inuti while loopen. Vid slutet av while loop, Arduino kontroller för att se om argumentet inuti while loopars parenteser är sant igen. Om det stämmer fortfarande, while loop körs alla kommandon i de culy tandställning igen, detta fortsätter för evigt till argumentet inuti while loopens parenteser beräknas till falskt. I exemplet nedan använder jag while loop att fortsätta spela tre Obs frasen så länge som digitalRead(buttonPin) == hög.

byte noteON = 144; //note på kommando
byte Obs; //storage för spelar Obs

int buttonPin = 7.
int potPin = A0;
booleska currentState = låg, //stroage för aktuella knappläge
booleska lastState = låg, //storage för sista knappen stat

void setup() {
pinMode (buttonPin, ingång); //this tid vi kommer att ange PIN-koden som indata
Serial.BEGIN (9600); //initialize seriell anslutning
}

void loop() {
currentState = digitalRead(buttonPin);

om (currentState == hög & & lastState == låg) {//if-knappen bara har tryckt

int currentPotVal = analogRead(potPin);
Obs = karta (currentPotVal, 0, 1023, 0, 127);
int noteLength = 200.
byte noteVelocity = 127;

While(digitalRead(buttonPin) == hög) {//as långa knappen trycks, upprepa arpeggio
MIDImessage (noteON, Obs, noteVelocity); //base anmärkning
Delay(noteLength);
MIDImessage (noteON, Obs, 0); //turn anmärkning av
MIDImessage (noteON, notera + 7, noteVelocity), //fifth
Delay(noteLength);
MIDImessage (noteON, Obs + 7, 0); //turn anmärkning av
MIDImessage (noteON, notera + 12, noteVelocity), //octave
Delay(noteLength);
MIDImessage (noteON, Obs + 12, 0);
}
}

lastState = currentState;
}

skicka MIDI-meddelande
void MIDImessage (byte kommando, byte data1, byte data2) {
Serial.write(Command);
Serial.write(Data1);
Serial.write(data2);
}

Se Steg
Relaterade Ämnen

Arduino tid-och-Sensor-baserade Android musikspelare

Tänk dig din musikspelare som spelar för dig, en spelare den meningen det omgivande ljuset, temperatur och tid som påverkar stämningen i en person, och välja en låt kategorisera som stämningar. Eftersom jag inte har en sensor som kan översätta mänskl...

Färg sensorer och Arduino seriell kommunikation för nybörjare

Hej alla, jag ska prata om färg sensorer: hur man bygger och kalibrera en och hur man använder det med seriell kommunikation genom en Arduino ombord.Det sista steget förklarar hur jag använde detta projekt för en Gimp (står för "GNU Image Manipulatio...

Mäta hastigheten på ljud med Arduino microcontroller och ultrasonic sensor

Min 6-åriga dotter, Kennet, visar hur man mäter ljudets hastighet i luft med Arduino Uno microcontroller och ultrasonic sensor.Jag tycker detta är ett bra projekt för barn att blir exponerade för vetenskap, teknik och matematik.Steg 1: Vi behöver 1....

Arduino: Hur du ansluter gemensamma sensorer och objekt

Ibland, tycks du bara inte kunna räkna ut hur till få en krets för att träna! Detta instructable hjälper dig använda din elektronik på det sätt de var tänkta att användas genom att visa dig hur du ansluter dem till din Arduino ombord.Svårighet: e a s...

Nonieskalans sensorer och Arduino (eller Teensy) för loggning av Data

låt oss titta på hur man samlar in data från nonieskalans pedagogiska sensorer med en Arduino-kompatibel microcontroller utveckling ombord.Om du behöver bara att anslutas en sond med en dator och vill att allt ska fungera, bör du nog köpa en Vernier...

Hinder Avoider Robot använder Arduino Uno och IR-närhet Sensor

Följ stegen för att skapa ett hinder undvika Robot använder Arduino Uno och IR-rörelsesensorSteg 1: Delar krävs1) Arduino Uno R3 (klon kommer att göra)2) IR närhet sensorer (2 rekommenderas)3) chassi med motorer4) bakbord5) L293D Motor förare ombord6...

Komma igång med avstånd sensorer och Arduino

Detta är en start guide för att använda avstånd sensorer med Arduino och viss bearbetning. Vi har använt dessa sensorer:SKARP GP2Y0A21YK0FEnhet för avstånd Sensor mätningBestår av en integrerad kombination av PSD (position känslig detektor), IRED (in...

Att göra Radar använder Arduino, Ultrasonic sensor och MATLAB

I detta projekt kommer vi att göra en enkel radar upptäcka hinder.Intervallet beror på Ultrasonic sensor vi använt (i det här projektet: 3 meter).Steg 1: komponenterKomponenter:1 - Arduino Uno2 - ultraljud avstånd Sensor (länk: https://www.parallax.c...

Anpassade Arduino Shield och sensorer

Översikt:Detta instructable kommer att bygga en rad anpassade sensor moduler och en Arduino shield. Modulerna är tillgängliga från många olika källor, men fans av Instructables webbplats skulle förmodligen hitta tillfredsställelse i att göra sina egn...

Fläkt RPM med inre hall effekt sensor och Arduino (Intro till hårdvara avbryta och LCD display)

För mitt andra projekt för arbete, jag var tvungen att mäta rotationshastigheten av rotoren i varv Per minut (RPM) av en modifierad dator fläkt. Den hade tre kablarna kommer ut och som kryssat mig som kanske har något sätt att kontrollera sin hastigh...

432 MHz trådlösa sensorer och eluttag för hemautomation använder Arduino

Home automation blir mer och mer populära, prisvärda och fascinerar människor. Internet erbjuder sådana möjligheter som aldrig förr. Imponera på dina vänner visar på Iphone som du kan växla på/av-lampa i din lägenhet 1000 km bort och samtidigt se det...

Avståndsmätning med Ultrasonic sensor och Arduino

Hej varje enJag fick min första Aduino nyligen, här är jag gonne Visa du min första projektet som avståndsmätning använder Ultrasonic sensor och Arduino, kan du använda detta projekt många applicering vilja1-flytande nivå2-objekt upptäckt3-avståndsmä...

Openremote Arduino sensorer servo RGB ledde och switch

Detta är hur man använder Openremote programvara för att kontrollera en RGB ledde med reglagen för varje färg, använda en switch för att aktivera en led eller inaktivera, flytta ett servo med ett reglage och läsa en temperaturgivare. Alla objekt ge f...

Arduino: Elkablar och programmering av RFID-Sensor

RFID är, Radio Frequency Identification, ett system för att överföra data över korta avstånd (vanligtvis mindre än 6 tum). Ofta bara en av de två enheterna måste drivas, medan den andra är en passiv enhet. Detta gör för enkel användning i sådana sake...

Arduino Touch kapacitiv MIDI Keyboard

Detta Instructable visar dig hur man gör en touch kapacitiv MIDI keyboard. Om du följer alla steg korrekt, fungerar det ungefär så här:Videoanteckning: detta fungerar inte med normal färg. För denna video använde jag Konduktiv färg.Vad du behöver:-Ar...

Göra en brandvarnare i minuter med Samsung SAMIIO, Arduino UNO och Raspberry Pi

Låt oss bygga en IoT enhet som skickar flamma sensordata att SAMI med SAMERNAS WebSockets. IoT enheten består av en off-the-shelf sensor, Arduino UNO och Raspberry Pi.I detta genomförande används en enkel uppenbart för att snabbt skapa en ny enhetsty...

Korrekt flytande nivå Controller med låg kostnad sensor och TV: ns fjärrkontroll för inställningar

Detta är den min första personal Arduino projekt. Även genom planerar jag att automatisera våra över tank vattennivå jag inte gillar att investera mer pengar på instrument. Jag har några Arduino ombord och relay styrelser från mina vänner. Så använd...

Real Time temperatur loggning med Arduino, NodeJS och Plotly!

Motivationen för det här projektet grodde efter behandlingen om Mark Zuckerberg önskan att skapa ett Smart hem för en av hans 2016 projekt. Att vara nyfiken på mig själv, jag ville försöka genomföra en mycket grundläggande temperatur loggning program...

Bilar leksak med arduino uno och 3dprinting

Kroppen av bilen trycktes av 3D-skrivare. (makerbot mini 5.)Och hjärnan är utformad med enkla arduino skiss...Först min 3D printer(mini) plattform storlek är så liten (about10x10).Så, jag omgjorda bil kropp med rhino 3D som lämplig plattform storlek...