Spela fransmännen kan kan använda Arduino och Summer (8 / 11 steg)
Steg 8: Spela noter
Eftersom funktionen buzz() i exemplet skiss tillåter en tonhöjd frekvens anges, är det dags att slå upp vad frekvenser göra musiknoter och testa en skala.
Söka på Google efter [Musiknoteringen frekvenser] avslöjade detta stora diagram som innehåller frekvenserna stora musikaliska utbud. Som hjälpte svara på frågan, "Hur gör jag summern göra musikaliska toner?".
En skiss att spela en oktav anteckningar kunde se ut så här:
---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
void setup() {
pinMode (4, OUTPUT); Ange en PIN-kod för Summer utgång
}
void loop() {
Buzz (4, 996, 1000); PIN, Obs frekvens, spela längd i millisekunder
Buzz (4, 1050, 1000);
Buzz (4, 1110, 1000);
Buzz (4, 1180, 1000);
Buzz (4, 1250, 1000);
Buzz (4, 1320, 1000);
Buzz (4, 1400, 1000);
Buzz (4, 1490, 1000);
Buzz (4, 1580, 1000);
Buzz (4, 1670, 1000);
Buzz (4, 1770, 1000);
Buzz (4, 1870, 1000);
Delay(1000); vänta lite mellan surrar
}
{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---
Det skulle fungera, men letar du upp frekvenserna i ett diagram varje gång ett meddelande skapas skulle vara alltför betungande för vissa. Skissen nedan lägger till en matris av frekvenser för referens och en ny playNote() funktion som spelar en refererade frekvens i matrisen med nummer och anropar funktionen buzz med det frekvensen.
En kommentar om matriser, är att de börjar med 0, inte 1. Så det första objektet i noteFreqArr nedan skulle refereras till som noteFreqArr [0], skulle andra vara noteFreqArr [1], och så vidare.
---Kopiera efter denna linje---
Summern exempel funktion för CEM-1203 summern (Sparkfuns del #COM-07950).
av Rob Faludi
http://www.Faludi.com
refereras från http://www.phy.mtu.edu/~suits/notefreqs.html
börjar med F noteFreqArr [0]
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};
void setup() {
pinMode (4, OUTPUT); Ange en PIN-kod för Summer utgång
}
void playNote (int noteInt, lång längd, långa andetag = 0) {
längd = längd - andedräkt;
Buzz (4, noteFreqArr [noteInt], längd);
IF(Breath > 0) {//take en kort paus eller "andas" om anges
Delay(Breath);
}
}
void loop() {
playNote (52, 1000);
playNote (53, 1000);
playNote (54, 1000);
playNote (55, 1000, 100);
playNote (56, 1000);
playNote (57, 1000);
playNote (58, 1000);
playNote (59, 1000, 100);
playNote (60, 1000);
playNote (61, 1000);
playNote (62, 1000);
playNote (63, 1000, 100);
Delay(1000); vänta lite mellan surrar
}
{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---
Cool! Nu göra lite musik i nästa steg...