Stap 10: De broncode
De code van de Postbox Synth geschreven door Sam Stratter (aka humanharddrive) klinkt geweldig. Het heeft 6 golfvormen, 2 oscillatoren, een LFO. De code is beschikbaar onder zijn Instructable. Ik gebruikte zijn code, bijna zoals het is, behalve ik de arpeggio-spullen verwijderde en het bewerkt zodat ik kon alle 6 knoppen gebruiken.
De capacitieve sensing code die ik gebruikte is een klein knipsel uit ik weet niet waar, ik heb kopiëren en plakken van project tot project. Er is een hele capacitieve sensing bibliotheek op de Arduino Playground die veel meer opties heeft. De code die ik heb is eenvoudig, niet nodig een weerstand net leest een PIN-code en geeft als resultaat een getal, oftewel het aantal cycli dat het duurt om de pincode te vervullen. De geretourneerde waarde is meestal 1 tot en met 20 of zo.
Een opmerking over de aanraakgevoelige in teledetectie - het zal niet werken recht tenzij u een goede grond hebt. Ik vond dit op de harde manier na het werken aan dit project. Wanneer aangedreven door de USB-kabel, Lees alle GLB knoppen prima. Wanneer ik wil loskoppelen en het door mijn 9V batterij macht, kreeg de lezingen alle onregelmatig. Ik was in staat om rond het probleem door de invoering van 2 die meer metaal laveert op de bodem van het vak waar je duimen uiteraard heengaat en bedrading beiden naar de grond. Dit was eigenlijk een goede zaak, aangezien het geeft je duimen iets om grip. Na het doen van die de aflezing steeds normaler maar er is nog steeds een constante "jitter".
De enige code moeite waard delen is op dit punt voor de berekening van wat er rekening mee te spelen. Hier is het:
int nonote = 1;
int curnote = 0;
noteMultiplier = 0;
voor (int x = 0; x < 4; x ++) {}
Als (readCapacitivePin(multPins[x]) > 1) {noteMultiplier = x + 1;}
Als (readCapacitivePin(notePins[x]) > 1) {curnote ++; nonote = 0;}
}
multPins is een matrix van welke pinnen van de Arduino aan de linkerkant "multiplier" knoppen zijn gekoppeld.
notePins is een matrix van welke pinnen van de Arduino aan de rechterkant "note"-knoppen zijn gekoppeld.
Als (nonote == 1) {}
notePlaying = false;
} else {}
noteSelect=43+((noteMultiplier*4)+curnote);
notePlaying = true;
}
De eerste lus leest alle 4 pinnen aan elke kant. Als de waarde van de pin groter dan 1 is, is het geraakt. Aan de linkerzijde als het leest ze maakt wat de hoogste knop geraakt de multiplier. Dus als u knop #4 aanraken bent, vergroot het het aantal knoppen die u aan de rechterkant door 4 ingedrukt. De linkerkant is opeenvolgend. Als u #1 en #4 op hetzelfde moment ingedrukt bent, zal noteMultiplier uiteindelijk op 4, aangezien het de waarden opeenvolgend leest en noteMultiplier ingesteld.
De nonote/notePlaying-variabelen bepalen die als geen toetsen worden ingedrukt op het recht (nonote nog steeds gelijk is aan 1 na het uitvoeren van door de lus) dan notePlaying = false, speel om het even wat niet. notePlaying is een variabele die wordt gebruikt door de synthesizer-code die zegt tegen geluid genereren of niet.
noteSelect is van de motor van de synthesizer code voor welk merk nummer te spelen. We beginnen bij een basis nota (43 in dit geval, dat is een C), en de vermenigvuldigingswaarde, plus wat de waarde van curnote is te komen tot het uitkomt wat opmerking toevoegen. Dit kunt u stapsgewijs uit notitie #47 (niets drukte op links, 1 knop ingedrukt aan rechterkant) tot een maximum van opmerking #67. (4 knoppen ingedrukt op de links en 4 aan de rechterkant)