Spela fransmännen kan kan använda Arduino och Summer (9 / 11 steg)
Steg 9: Spela kan kan
Det är dags att göra lite musik! Med en flygel (eller Garage Band i mitt fall), lyssna till olika anteckningar du vill skapa. Spela låten på gehör, eller slå upp det på noter. För varje not som du vill skapa, räknas från den första tonen i arrayen, F, att räkna ut vilka Obs heltal i matrisen matchar anteckningen som spelas på piano.
NoteInt exempel:
G =??: vi ska lista ut.
F = 0
Lägga till en oktav (12) för att göra planen mer tilltalande på denna buzzer = 12
G är 2 nycklar högre än F (svart och vit nyckel) på tangentbordet, så Lägg 2 = 14
G = 14
För spela längd i det här exemplet:
en sextonde not = 250 millisekunder
en åttonde Observera = 500 millisekunder
en fjärdedelsnot = 1000 millisekunder
en halv anteckning = 2000 millisekunder
en hela Obs = 4000 millisekunder
Dessutom har 'andedräkt' lång i playNote() funktion ändrats till 20, att ge en liten paus mellan varje notera att ge en "tee-tee-tee-tee" effekt när du spelar. Här är resultatet:
---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};
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 = 20) {
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() {
varmrätt
playNote(24,500);
playNote(17,1000);
playNote(19,250);
playNote(22,250);
playNote(21,250);
playNote(19,250);
playNote(24,500);
playNote(24,500);
playNote(24,250);
playNote(26,250);
playNote(21,250);
playNote(22,250);
playNote(19,500);
playNote(19,500);
playNote(19,250);
playNote(22,250);
playNote(21,250);
playNote(19,250);
playNote(17,250);
playNote(29,250);
playNote(28,250);
playNote(26,250);
playNote(24,250);
playNote(22,250);
playNote(21,250);
playNote(19,250);
playNote(17,1000);
playNote(19,250);
playNote(22,250);
playNote(21,250);
playNote(19,250);
playNote(24,500);
playNote(24,500);
playNote(24,250);
playNote(26,250);
playNote(21,250);
playNote(22,250);
playNote(19,500);
playNote(19,500);
playNote(19,250);
playNote(22,250);
playNote(21,250);
playNote(19,250);
playNote(17,250);
playNote(24,250);
playNote(19,250);
playNote(21,250);
playNote(17,250);
Delay(250);
}
{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---
Arduino är nu spelar kan kan, men det är fortfarande... bla bla. Nästa steg ger anteckningar lite mer struktur.