Stap 10: Verbeteren, Texturize, dans!
Nu de Arduino speelt de kan, is het tijd om te eindigen met finesse!
Om te maken dingen meer interessant, speelt de playNote() functie in de onderstaande code elke noot in 4 octaven, sequencing via octaven snel een interessant om textuur te geven aan het geluid. Daarnaast is 4 afspeelmodi bijgekomen om te spelen het hoofdgerecht van het kan kan in verschillende octave patronen. De mogelijkheden zijn bijna onbegrensd. Probeer het uit en geniet!
---kopiëren na deze regel---
Zoemer voorbeeldfunctie voor de CEM-1203 zoemer (van Sparkfun deel #COM-07950).
door Rob Faludi
http://www.Faludi.com
Toevoegingen door Christopher Stevens
http://www.christopherstevens.CC
verwezen vanuit http://www.phy.mtu.edu/~suits/notefreqs.html
beginnend met F noteFreqArr [1]
int noteFreqArr [] {} =
49,4 52,3 55,4, 58,7, 62,2, 65,9, 69,9, 74, 78,4, 83,1, 88, 93,2,
98,8 105, 111, 117, 124, 132, 140, 148, 157, 166, 176, 186,
198 209, 222, 235, 249, 264, 279, 296, 314, 332, 352, 373,
395 419, 444, 470, 498, 527, 559, 592, 627, 665, 704, 746,
790 837, 887, 940, 996, 1050, 1110, 1180, 1250, 1320, 1400, 1490,
1580 1670, 1770, 1870, 1990, 2100};
lange modus = 0;
VOID Setup {}
pinMode (4, OUTPUT); een pincode voor uitvoer van de zoemer instellen
}
VOID playNote (lange noteInt, lange lengte, lange modus, lange adem = 25) {}
lengte = lengte - adem;
lange noteInt2 = noteInt + 12; 1 octaaf omhoog
lange noteInt3 = noteInt + 24; 2 octaven omhoog
lange noteInt4 = noteInt + 36; 3 octaven omhoog
lange playLoop = lengte / 100; lengte delen door 4, voor gebruik in de afspeelvolgorde
if(mode == 0) {//mode 0 volgorde
voor (lang ik = 0; ik < playLoop; i ++) {}
Buzz (4, noteFreqArr [noteInt], 20);
delay(5);
Buzz (4, noteFreqArr [noteInt2], 20);
delay(5);
Buzz (4, noteFreqArr [noteInt3], 20);
delay(5);
Buzz (4, noteFreqArr [noteInt4], 20);
delay(5);
}
} else if(mode == 1) {//mode 1 reeks
voor (lang ik = 0; ik < playLoop; i ++) {}
Buzz (4, noteFreqArr [noteInt3], 20);
delay(5);
Buzz (4, noteFreqArr [noteInt4], 20);
delay(5);
Buzz (4, noteFreqArr [noteInt3], 20);
delay(5);
Buzz (4, noteFreqArr [noteInt4], 20);
delay(5);
}
} else if(mode == 2) {//mode 2 reeks
voor (lang ik = 0; ik < playLoop; i ++) {}
Buzz (4, noteFreqArr [noteInt3], 20);
delay(5);
Buzz (4, noteFreqArr [noteInt3], 20);
delay(5);
Buzz (4, noteFreqArr [noteInt3], 20);
delay(5);
Buzz (4, noteFreqArr [noteInt2], 20);
delay(5);
}
} else if(mode == 3) {//mode 3 reeks
voor (lang ik = 0; ik < playLoop; i ++) {}
Buzz (4, noteFreqArr [noteInt4], 40);
delay(5);
Buzz (4, noteFreqArr [noteInt2], 40);
delay(5);
}
}
if(Breath > 0) {//take een korte pauze of 'adem' als opgegeven
delay(Breath);
}
}
void loop {}
hoofdgerecht
playNote (12, 500, modus);
playNote (5, 1000, modus);
playNote (7, 250, modus);
playNote (10, 250, modus);
playNote (9, 250, modus);
playNote (7, 250, modus);
playNote (12, 500, modus);
playNote (12, 500, modus);
playNote (12, 250, modus);
playNote (14, 250, modus);
playNote (9, 250, modus);
playNote (10, 250, modus);
playNote (7, 500, modus);
playNote (7, 500, modus);
playNote (7, 250, modus);
playNote (10, 250, modus);
playNote (9, 250, modus);
playNote (7, 250, modus);
playNote (5, 250, modus);
playNote (17, 250, modus);
playNote (16, 250, modus);
playNote (14, 250, modus);
playNote (12, 250, modus);
playNote (10, 250, modus);
playNote (9, 250, modus);
playNote (7, 250, modus);
playNote (5, 1000, modus);
playNote (7, 250, modus);
playNote (10, 250, modus);
playNote (9, 250, modus);
playNote (7, 250, modus);
playNote (12, 500, modus);
playNote (12, 500, modus);
playNote (12, 250, modus);
playNote (14, 250, modus);
playNote (9, 250, modus);
playNote (10, 250, modus);
playNote (7, 500, modus);
playNote (7, 500, modus);
playNote (7, 250, modus);
playNote (10, 250, modus);
playNote (9, 250, modus);
playNote (7, 250, modus);
playNote (5, 250, modus);
playNote (12, 250, modus);
playNote (7, 250, modus);
playNote (9, 250, modus);
playNote (5, 250, modus);
delay(250);
if(mode == 0) {}
modus = 1;
} else if(mode == 1) {}
modus = 2;
} else if(mode == 2) {}
modus = 3;
} else if(mode == 3) {}
modus = 0;
}
}
VOID buzz (int targetPin, lange frequentie, lange lengte) {}
lange delayValue = 1000000/frequentie/2; berekenen van de vertragingswaarde tussen overgangen
1 seconde het waard van microseconden, gedeeld door de frequentie, vervolgens gesplitst in tweeën sinds
Er zijn twee fasen aan elke cyclus
lange numCycles = frequentie * lengte / 1000; Bereken het aantal cycli voor juiste timing
vermenigvuldigen cycli frequentie, die is echt per seconde, door het aantal seconden
het totale aantal cycli te produceren
voor (lang ik = 0; ik < numCycles; i ++) {/ / voor de berekende lengte van tijd...
digitalWrite(targetPin,HIGH); Schrijf de zoemer pin hoog te duwen uit de diaphram
delayMicroseconds(delayValue); wachten op de berekende vertragingswaarde
digitalWrite(targetPin,LOW); Schrijf de zoemer pin lage zich terugtrekken van de diaphram
delayMicroseconds(delayValue); againf of de berekende vertragingswaarde wachten
}
}
---kopiëren voordat u deze regel---
Alles klaar! Nu op de vloer, stadium of meubilair van keuze, en vieren met dans!