Stap 11: Pitchbend MIDI commando's met Arduino
Een Pitchbend MIDI om bericht te verzenden, gebruikt u de opdracht 224. Net als opmerking op wordt Pitchbend berichten hebben twee gegevensbytes, de eerste gegevensbyte is fijn pitchbend en de tweede is grof pitchbend. Net als opmerking en snelheid zijn de grove en fijne pitchbend getal tussen 0 en 127. Zoals u denken zou, geeft grof pitchbend u cursus controle en fijne pitchbend geeft u fijne controle. Fijne pitchbend geeft u een extra 128 stappen controle tussen elke stap van de aangrenzende cursus; fijne pitchbend is zo fijn dat ik niet vind mezelf vaak nodig om het te gebruiken. Instellen van grof pitchbend = 64 en fijne pitchbend = 0 geeft geen pitchbend, iets hoger dan dat zal toonhoogte buig uw notities omhoog en iets lager zal pitchbend uw notities naar beneden.
Hier is hoe u een pitchbend-bericht verzenden:
MIDImessage (pitchbendCmd, finePitchbend, coarsePitchbend);
Ik aangesloten de piezo uit de laatste stap op analoge pin A1, bekabeld een potentiometer aan analoge pin A0 en liep de volgende code:
byte noteOn = 144; byte pitchbendCmd = 224; int piezo = A1; int analogPB = A0; int threshold = 50;//anything over fifty means we've hit the piezo void setup(){ Serial.begin(9600); } void loop(){ int piezoVal = analogRead(piezo); if (piezoVal>threshold){ MIDImessage(noteOn, 60, 127); int time = 0; while(time<300){ int analogPBVal = analogRead(analogPB); byte pitchbend = map(analogPBVal, 0, 1023, 0, 127); MIDImessage(pitchbendCmd, 0, pitchbend); delay(1); time++; } MIDImessage(noteOn, 60, 0); } } //send MIDI message void MIDImessage(byte command, byte data1, byte data2) { Serial.write(command); Serial.write(data1); Serial.write(data2); }
In de bovenstaande code gebruikte ik om te lezen van de gegevens van mijn potentiometer, schalen op een pitchbend-waarde tussen 0 en 127 de volgende regels:
int analogPBVal = analogRead(analogPB);
byte pitchbend = kaart (analogPBVal, 0, 1023, 0, 127);
Ik gebruikte deze opdracht om een pitchbend-bericht te verzenden, gebruikte ik mijn pitchbend val om de grof pitchbend, fijne pitchbend was ingesteld op 0.
MIDImessage (pitchbendCmd, 0, pitchbend);