Arduino, sensorer och MIDI- (11 / 16 steg)
Steg 11: Pitchbend MIDI-kommandon med Arduino
För att skicka meddelandet Pitchbend MIDI, använder du kommandot 224. Som anteckning på, Pitchbend meddelanden har två data-byte, första databyte är fina pitchbend och andra är grova pitchbend. Liksom not och hastighet, grova och fina pitchbend är tal mellan 0 och 127. Som du skulle tänka, ger grova pitchbend dig kursen kontroll och fina pitchbend ger du fina kontroll. Fina pitchbend ger dig en ytterligare 128 steg av kontroll mellan varje intilliggande kurs steg; fina pitchbend är så fin att jag inte finner mig ofta behöva använda den. Ställa in grova pitchbend = 64 och fina pitchbend = 0 ger inga pitchbend, något högre än som kommer pitch böj dina anteckningar upp och något lägre kommer pitchbend anteckningarna ner.
Här är hur du skickar ett pitchbend meddelande:
MIDImessage (pitchbendCmd, finePitchbend, coarsePitchbend);
Jag ansluten piezo från det sista steget till analoga pin A1, och trådbunden upp en potentiometer till analoga stift A0 och körde följande kod:
byte noteOn = 144;
byte pitchbendCmd = 224;
int piezo = A1;
int analogPB = A0;
int tröskel = 50, //anything över femtio innebär att vi har drabbats av piezo
void setup() {
Serial.BEGIN(9600);
}
void loop() {
int piezoVal = analogRead(piezo);
om (piezoVal > tröskel) {
MIDImessage (noteOn, 60, 127);
int tid = 0;
While(time<300) {
int analogPBVal = analogRead(analogPB);
byte pitchbend = karta (analogPBVal, 0, 1023, 0, 127);
MIDImessage (pitchbendCmd, 0, pitchbend);
Delay(1);
tid ++;
}
MIDImessage (noteOn, 60, 0);
}
}
skicka MIDI-meddelande
void MIDImessage (byte kommando, byte data1, byte data2) {
Serial.write(Command);
Serial.write(Data1);
Serial.write(data2);
}
I koden ovan använde jag följande rader att läsa data från min potentiometer, skala upp det till ett pitchbend värde mellan 0 och 127:
int analogPBVal = analogRead(analogPB);
byte pitchbend = karta (analogPBVal, 0, 1023, 0, 127);
Jag använde kommandot Skicka ett pitchbend meddelande, jag använde min pitchbend val att ställa in den grova pitchbend, fina pitchbend sattes till 0.
MIDImessage (pitchbendCmd, 0, pitchbend);