Arduino MIDI fot Pedal tangentbord (4 / 8 steg)
Steg 4: Skriva koden
När man trycker på en pedal skickas kommandot slå på Obs i en viss hastighet. Potentiometern (volym pedal) används för att avgöra det. Det ger värden från 0-1023. Funktionen karta används proportionellt mappa det numret till ett annat nummer mellan 0-127. Om du vill aktivera en anteckning av när pedalen är inte intryckt, skickas kommandot för att notera, förutom hastigheten är 0.
Med arduinos skicka att kommando när en pedal skjuts med "om"-uttryck i slingan skulle fungera utom det skulle skicka det kommandot varje gång loopen upprepas när pedalen är nere. Om uttrycket "annat" används också för att skicka kommando att stoppa Obs (hastighet 0), skulle sedan arduinos skicka kommandot för varje pedal som inte trycks varje gång loopen upprepas. Arduinos och synthesizer inte kunde hantera sänder eller tar emot allt som data.
För att åtgärda detta, måste arduinos skicka kommandot upp en anteckning en gång efter att pedalen är nedtrampad. De måste också göra samma för när pedalen släpps. För att göra detta, arduinos måste "komma ihåg" det sista skick (pressad eller inte pressad) pedalerna var sista gången slingan upprepas.
För att lägga till funktionen, gjorde jag en "senast stat" variabel. Det första arduinos göra efter avkänning när en pedal har tryckt är jämföra den förra skick som de var till den stat som de är nu. Detta gör det möjligt för arduinos att skicka kommandot för en notering när när det har tryckt och när när det har släppts.
Eftersom det finns två Arduinos, finns det två program som skrivs. Det helt enkelt kopiera först och klistra in den i ett nytt projekt och ändra alla anteckningar. Kom ihåg att ett program kommer att använda en ytterligare anmärkning än en annan!
Både Arduinos behöva skicka kommandon på samma MIDI-kanal. Jag använde MIDI-kanal 1.
Att få arduinos skicka MIDI-data läsa över denna guide: http://arduino.cc/en/Tutorial/Midi. Jag skicka inte anteckningar eller hastighet i hexadecimal form. Decimal fungerar perfekt eftersom Serial.write(); kommandot skickar det som ett byte.
Det finns två program bifogas i zip-filen; en för en ATmega, en annan för andra.