Spela fransmännen kan kan använda Arduino och Summer (10 / 11 steg)
Steg 10: Förbättra, Texturize, dans!
Nu när Arduino spelar kan kan, är det dags att avsluta med finess!
För att göra saker mer intressant, spelar den playNote() funktionen i koden nedan varje not 4 oktaver, sekvensering genom oktaver snabbt att ge en intressant konsistens till ljudet. Dessutom 4 spellägen har lagts till att spela det huvudsakliga jagar av den kan kan i olika octave mönster. Möjligheterna är nästan obegränsade. Prova det och njut!
---Kopiera efter denna linje---
Summern exempel funktion för CEM-1203 summern (Sparkfuns del #COM-07950).
av Rob Faludi
http://www.Faludi.com
Tillägg av Christopher Stevens
http://www.christopherstevens.cc
refereras från http://www.phy.mtu.edu/~suits/notefreqs.html
börjar med 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};
långa läge = 0;
void setup() {
pinMode (4, OUTPUT); Ange en PIN-kod för Summer utgång
}
void playNote (långa noteInt, lång längd, lång läge, långa andetag = 25) {
längd = längd - andedräkt;
lång noteInt2 = noteInt + 12. 1 oktav upp
lång noteInt3 = noteInt + 24. 2 oktaver upp
lång noteInt4 = noteInt + 36. 3 oktaver upp
lång playLoop = längd / 100; Dela längden i 4, för användning i uppspelningssekvensen
IF(mode == 0) {//mode 0 sekvens
för (länge jag = 0; jag < 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);
}
} annat if(mode == 1) {//mode 1 sekvens
för (länge jag = 0; jag < 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);
}
} annat if(mode == 2) {//mode 2 sekvens
för (länge jag = 0; jag < 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);
}
} annat if(mode == 3) {//mode 3 sekvens
för (länge jag = 0; jag < playLoop; i ++) {
Buzz (4, noteFreqArr [noteInt4], 40);
Delay(5);
Buzz (4, noteFreqArr [noteInt2], 40);
Delay(5);
}
}
IF(Breath > 0) {//take en kort paus eller "andas" om anges
Delay(Breath);
}
}
void loop() {
varmrätt
playNote (12, 500, läge);
playNote (5, 1000, läge);
playNote (7, 250, läge);
playNote (10, 250, läge);
playNote (9, 250, läge);
playNote (7, 250, läge);
playNote (12, 500, läge);
playNote (12, 500, läge);
playNote (12, 250, läge);
playNote (14, 250, läge);
playNote (9, 250, läge);
playNote (10, 250, läge);
playNote (7, 500, läge);
playNote (7, 500, läge);
playNote (7, 250, läge);
playNote (10, 250, läge);
playNote (9, 250, läge);
playNote (7, 250, läge);
playNote (5, 250, läge);
playNote (17, 250, läge);
playNote (16, 250, läge);
playNote (14, 250, läge);
playNote (12, 250, läge);
playNote (10, 250, läge);
playNote (9, 250, läge);
playNote (7, 250, läge);
playNote (5, 1000, läge);
playNote (7, 250, läge);
playNote (10, 250, läge);
playNote (9, 250, läge);
playNote (7, 250, läge);
playNote (12, 500, läge);
playNote (12, 500, läge);
playNote (12, 250, läge);
playNote (14, 250, läge);
playNote (9, 250, läge);
playNote (10, 250, läge);
playNote (7, 500, läge);
playNote (7, 500, läge);
playNote (7, 250, läge);
playNote (10, 250, läge);
playNote (9, 250, läge);
playNote (7, 250, läge);
playNote (5, 250, läge);
playNote (12, 250, läge);
playNote (7, 250, läge);
playNote (9, 250, läge);
playNote (5, 250, läge);
Delay(250);
IF(mode == 0) {
läge = 1;
} annat if(mode == 1) {
läge = 2;
} annat if(mode == 2) {
läge = 3;
} annat if(mode == 3) {
läge = 0;
}
}
{Ogiltig buzz (int targetPin, lång frekvens, lång längd)
lång delayValue = 1000000/frekvens/2; beräkna dröjsmål värdet mellan övergångar
1 sekund är värt mikrosekunder, dividerat med frekvensen, sedan kluvna sedan
Det finns två faser till varje cykel
lång numCycles = frekvens * längd / 1000; beräkna antalet cykler för rätt tid
multiplicera cykler frekvens, som är verkligen per sekund, med antalet sekunder för att
få det totala antalet cykler att producera
för (länge jag = 0; jag < numCycles; i ++) {/ / för den beräknade längden av tid...
digitalWrite(targetPin,HIGH); Skriv Summer pin hög att driva ut diaphram
delayMicroseconds(delayValue); vänta tills beräknad försening värde
digitalWrite(targetPin,LOW); Skriv summern pin låg att dra tillbaka diaphram
delayMicroseconds(delayValue); vänta againf eller beräknad försening värde
}
}
---Kopiera innan denna linje---
Alla klar! Nu få på golvet, scenen, eller möbler val, och fira med dans!