Skicka och ta emot MIDI med Arduino (6 / 11 steg)
Steg 6: Grundton på, notera Off med Arduino
Denna kod skickar MIDI-meddelanden med hjälp av Arduino digital stift 1 Observera på och observera off kommandon.
Som jag förklarade i steg 3, är MIDI-kommandon för anteckning på och notera av följande:
noteON = 10010000 = 144
noteOFF = 10000000 = 128
Båda dessa kommandon är följt av två mer byte att göra en komplett MIDI-meddelande, först är Obs och andra är velocity (för mer info om vad "note" och "velocity" menar kolla in min inledande MIDI instructable). Observera och hastigheten kan variera från 0 till 127. I det här exemplet jag använde notes, från 50 till 69 (D3 till A4):
för (int Obs = 50; Observera < 70; Obs ++) {}
och jag satte hastigheten 100:
int hastighet = 100;
Så när funktionen MIDImessage() anropas i loop() av arduino skiss, skickar de tre byte:
Serial.write(command);
Serial.write(MIDInote);
Serial.write(MIDIvelocity);
om "kommandot" i funktionen MIDImessage() är noteON sedan startar noteringen, om det är noteOFF Obs slutar.
Koden nedan spelar noterna D3-A4 i en loop, det visar på en MIDI-not för 300 MS då vänta 200ms innan du slår på nästa anteckning. Jag skrev en MaxMSP lapp (du kan hämta den runtime versionen gratis) som visar den inkommande MIDI-meddelanden och fäst den nedan. Här är ett exempel video:
< pre > / *
MIDI/på meddelanden
Av Amanda Ghassaei
Juli 2012
* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.
*/
int hastighet = 100; //velocity för MIDI-noter, måste vara mellan 0 och 127
högre hastighet gör vanligtvis MIDI-instrument högre
int noteON = 144; //144 = 10010000 i binärt, notera på kommando
int noteOFF = 128; //128 = 10000000 i binärt, Anm av kommandot
void setup() {
Ställ in MIDI-baud-hastighet:
Serial.BEGIN(31250);
}
void loop() {
för (int Obs = 50; Observera < 70; Obs ++) {//from not 50 (D3) till Obs 69 (A4)
MIDImessage (noteON, Obs, velocity); //turn anteckning på
fördröjning (300); //hold anmärkning för 300 MS
MIDImessage (noteOFF, Obs, velocity); //turn anmärkning av
fördröjning (200); //wait 200ms tills utlöser nästa anteckning
}
}
skicka MIDI-meddelande
void MIDImessage (int befalla, int MIDInote, int MIDIvelocity) {
Serial.write (kommandot); //send på eller av kommandot
Serial.write (MIDInote); //send pitch data
Serial.write (MIDIvelocity); //send hastighet data
}