Arduino flöjt Synth (10 / 12 steg)
Steg 10: Källkoden
Postbox Synth koden skriven av Sam Stratter (aka humanharddrive) låter awesome. Den har 6 vågformer, 2 oscillatorer, en LFO. Koden är tillgänglig under hans Instructable. Jag använde sin kod nästan som är, förutom att jag tog bort arpeggio grejer och ändrat det så att jag kunde använda alla 6 knoppar.
Kapacitiv avkänning koden jag använde är ett litet klipp från jag vet inte om jag har varit kopiera och klistra in den från projekt till projekt. Det finns ett helt kapacitiv avkänning bibliotek på Arduino Playground som har många fler alternativ. Jag har koden är enkel, kräver inte en resistor och bara läser en PIN-kod och returnerar ett tal som är antalet cykler som det tar för stift att fullgöra. Returvärdet är vanligtvis 1 till 20 eller så.
En anteckning om kapacitiv touch sensing - det brukar fungera rätt om du inte har en bra grund. Jag upptäckte detta den hårda vägen efter arbetar med detta projekt. När drivs av USB-kabeln, läsa alla knappar som cap böter. När jag skulle dra ur och makt det av min 9V batteri, fick avläsningarna alla oberäkneligt. Jag kunde komma runt problemet genom att sätta 2 mer metal nubb längst ner på rutan där tummarna skulle naturligtvis gå och ledningar dem båda till marken. Detta var faktiskt en bra sak eftersom det ger tummarna något grepp. Efter att ha gjort att avläsningarna är mer normal men det finns fortfarande några konstant "Darr".
Den enda kod värt att dela är på denna punkt för att beräkna vad Observera för att spela. Här är det:
int nonote = 1;
int curnote = 0;
noteMultiplier = 0;
för (int x = 0; x < 4; x ++) {
om (readCapacitivePin(multPins[x]) > 1) {noteMultiplier = x + 1;}
om (readCapacitivePin(notePins[x]) > 1) {curnote ++; nonote = 0;}
}
multPins är en array av vad Arduino pins på vänster sida "multiplier" knapparna är kopplade till.
notePins är en array av vad Arduino pins på höger sida "note" knapparna är kopplade till.
om (nonote == 1) {
notePlaying = false;
} annat {
noteSelect=43+((noteMultiplier*4)+curnote);
notePlaying = sant;
}
Först för slinga läser alla 4 stift på varje sida. Om värdet av stiftet är större än 1, är det att bli rörd. På vänster sida eftersom den läser dem den gör oavsett högsta knappen beröring multiplikatorn. Så om du beröring knapp #4, multiplicerar antalet knappar du håller till höger vid 4. Till vänster är sekventiella. Om du håller ner #1 och #4 på samma gång, kommer noteMultiplier att bli 4, eftersom det här läser värdena sekventiellt och noteMultiplier.
Nonote/notePlaying variabler fastställa att om inga knappar trycks på höger (nonote fortfarande lika med 1 efter att ha kört genom öglan) sedan notePlaying = false, inte spela något. notePlaying är en variabel som används av synt koden som säger att generera ljud eller inte.
noteSelect är syntet motorns kod för vilket Obs nummer att spela. Vi börjar på en basnot (43 i detta fall, som är en C), och Lägg till multiplikatorvärdet, plus vad värdet på curnote är att komma fram till vad not spelar. Här kan du steg från Obs #47 (inget tryckte på vänster, 1 knapp intryckt höger) upp till Obs #67. (4 knappar tryckte på vänster och 4 till höger)