Stap 7: Programmering (lezing en testen van de pedaal schakelaars)
Wanneer ik een nieuwe hardware-project beginnen en ik ben bereid om de code te schrijven, ik zal altijd het testen van alle ingangen en uitgangen met een beetje schetsen dat gewoon spits alle standaardwaarden naar de seriële monitor. Op die manier die ik zien kan dat alles werkt zelfs voordat de echte code. Opslaan van dit project-specifieke code voor later is handig als er tijden waar ik hebben zal om het te uploaden opnieuw, omdat iets niet werkt, of omdat ik heb toegevoegd een andere schakelaar/knop die eerste moet testen. Met behulp van seriële monitor debuggen en testen is altijd lastig met MIDI-toepassingen, omdat zij de seriële TX-poort van de Arduino delen. (slechts één of de andere kunt de seriële poort) Het vereist commentaar uit uw seriële communicatielijnen en de MIDI-lijnen, of vice versa. U wilt ervoor zorgen dat uw output klopt voordat u beginnen met het verzenden van MIDI-berichten, omdat je enigszins blinde zijn zal tenzij u gebruikt een MIDI controletoepassing.
byte pedalPins [12] = {2,3,4,5,6,7,8,9,10,15,17,16}; de pinnen op de Arduino elke pedaal zijn op
byte lastPin [12] = {0,0,0,0,0,0,0,0,0,0,0,0};
byte currentPin [12] = {0,0,0,0,0,0,0,0,0,0,0,0};
voor (int x = 0; x < 12, x ++) {}
currentPin[x]=digitalRead(pedalPins[x]);
als (currentPin[x]!=lastPin[x]) { / / huidige en vorige PIN DO NOT MATCH, een gebeurtenis zich heeft voorgedaan
lastPin [x] = currentPin [x];
Als (currentPin[x]==0) {Serial.print ("pedaal"); Serial.Print(x+1); Serial.println ("Up"); }
Als (currentPin[x]==1) {Serial.print ("pedaal"); Serial.Print(x+1); Serial.println ("Down"); }
};
}
}
Wanneer u met een pulsdrukker werkt, teneinde herhaalde triggers van de schakelaar geduwd als de lus over en voorbij loopt, zou we meestal slaan de "laatste" waarde die de schakelaar had en vergelijken met de huidige waarde die werd net gelezen. Dan kunnen we zien dat de twee waarden niet overeenkomen, zodat we weten dat er iets veranderd. Denk aan deze wijziging als een gebeurtenis waar iets moet gebeuren. In het geval van de pedalen is de logica veranderen van 0 naar 1, of 1-0 (schakelaar open of gesloten). Gebaseerd op de richting van het evenement zou u verschillende acties, zoals het verzenden van een MIDI-notitie op of opmerking uit het bericht. In de bovenstaande code opslaan we 12 huidige en vorige waarden scheiden, één voor elke pedaal. Dit kan we ingedrukt pedaal #1, en dan pushen pedaal #5, terwijl wij #1 voeren omdat ze allemaal onafhankelijk worden bijgehouden. Het belang hiervan voor MIDI is dat je moet overeenkomstige opmerking uit om berichten te verzenden elke keer dat u een notitie met de opmerking op activeren. Als u dat niet doet, wat u hebt aangesloten synthesizer zal gewoon blijven spelen de dezelfde eentonige notities en uiteindelijk zul je 12 noten allemaal op op hetzelfde moment met niets te zeggen stoppen met spelen van de notitie. Zij zullen voor altijd spelen totdat u uw synthesizer herstelt.
De bovenstaande knipsel van test code werkt, maar het is zeer bouncy met omhoog/omlaag triggers herhaald als het pedaal is geduwd of loslaten (met name wanneer u uw voet af, zoals het pedaal letterlijk omhoog wegens het veermechanisme stuitert). Laten we debounce het in de volgende stap.