Étape 10 : Améliorer, Texturize, danse !
Maintenant que l’Arduino joue le Can-Can, il est temps d’en finir avec finesse !
Pour rendre les choses plus intéressantes, la fonction playNote() dans le code ci-dessous joue chaque note sur 4 octaves, séquençage par octaves rapidement pour donner une texture intéressante au son. En outre, modes de jeu 4 ont été ajoutés à jouer le cours principal de la Can Can dans les profils d’octave différente. Les possibilités sont presque infinies. Essayez-le et appréciez !
---copier après cette ligne---
Fonction d’avertisseur sonore exemple pour le buzzer de CEM-1203 (de Sparkfun partie #COM-07950).
par Rob Faludi
http://www.Faludi.com
Ajouts par Christopher Stevens
http://www.christopherstevens.cc
référencé à partir de http://www.phy.mtu.edu/~suits/notefreqs.html
commençant par 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} ;
long mode = 0 ;
void setup() {}
pinMode (sortie 4) ; mettre une épingle pour la sortie de l’avertisseur sonore
}
void playNote (long noteInt, longue durée, mode long long souffle = 25) {}
longueur = longueur - souffle ;
long noteInt2 = noteInt + 12 ; 1 octave vers le haut
long noteInt3 = noteInt + 24 ; 2 octaves vers le haut
long noteInt4 = noteInt + 36 ; 3 octaves vers le haut
playLoop long = longueur / 100 ; diviser la longueur par 4, pour une utilisation dans la séquence de jeu
if(mode == 0) {//mode 0 séquence
pour (long j’ai = 0; i < 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 séquence
pour (long j’ai = 0; i < 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 séquence
pour (long j’ai = 0; i < 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 séquence
pour (long j’ai = 0; i < playLoop; i ++) {}
Buzz (4, noteFreqArr [noteInt4], 40) ;
Delay(5) ;
Buzz (4, noteFreqArr [noteInt2], 40) ;
Delay(5) ;
}
}
if(Breath > 0) {//take une courte pause ou « souffle » si spécifié
Delay(Breath) ;
}
}
void loop() {}
plat principal
playNote (12, 500, mode) ;
playNote (5, 1000, mode) ;
playNote (7, 250, mode) ;
playNote (10, 250, mode) ;
playNote (9, 250, mode) ;
playNote (7, 250, mode) ;
playNote (12, 500, mode) ;
playNote (12, 500, mode) ;
playNote (12, 250, mode) ;
playNote (14, 250, mode) ;
playNote (9, 250, mode) ;
playNote (10, 250, mode) ;
playNote (7, 500, mode) ;
playNote (7, 500, mode) ;
playNote (7, 250, mode) ;
playNote (10, 250, mode) ;
playNote (9, 250, mode) ;
playNote (7, 250, mode) ;
playNote (5, 250, mode) ;
playNote (17, 250, mode) ;
playNote (16, 250, mode) ;
playNote (14, 250, mode) ;
playNote (12, 250, mode) ;
playNote (10, 250, mode) ;
playNote (9, 250, mode) ;
playNote (7, 250, mode) ;
playNote (5, 1000, mode) ;
playNote (7, 250, mode) ;
playNote (10, 250, mode) ;
playNote (9, 250, mode) ;
playNote (7, 250, mode) ;
playNote (12, 500, mode) ;
playNote (12, 500, mode) ;
playNote (12, 250, mode) ;
playNote (14, 250, mode) ;
playNote (9, 250, mode) ;
playNote (10, 250, mode) ;
playNote (7, 500, mode) ;
playNote (7, 500, mode) ;
playNote (7, 250, mode) ;
playNote (10, 250, mode) ;
playNote (9, 250, mode) ;
playNote (7, 250, mode) ;
playNote (5, 250, mode) ;
playNote (12, 250, mode) ;
playNote (7, 250, mode) ;
playNote (9, 250, mode) ;
playNote (5, 250, mode) ;
Delay(250) ;
if(mode == 0) {}
mode = 1 ;
} else if(mode == 1) {}
mode = 2 ;
} else if(mode == 2) {}
mode = 3 ;
} else if(mode == 3) {}
mode = 0 ;
}
}
{} void buzz (int targetPin, fréquence longue, longue durée)
delayValue long = 1000000/fréquence/2 ; calculer la valeur de délai entre les transitions
1 seconde est d’une valeur de microsecondes, divisées par la fréquence, puis divisée en deux depuis
Il y a deux phases pour chaque cycle
numCycles long = fréquence * longueur / 1000 ; calculer le nombre de cycles pour bon moment
multiplication de fréquence, ce qui est vraiment cycles par seconde, par le nombre de secondes pour
obtenir le nombre total de cycles pour produire
pour (long j’ai = 0; i < numCycles; i ++) {/ / pour la longueur calculée de temps...
digitalWrite(targetPin,HIGH) ; écrire le NIP de buzzer haut pour faire sortir le diaphragme
delayMicroseconds(delayValue) ; Attendez que la valeur de délai calculé
digitalWrite(targetPin,LOW) ; écrire la broche sonnerie faible se replier le diaphragme
delayMicroseconds(delayValue) ; attendre againf ou la valeur de délai calculé
}
}
---copier avant cette ligne---
Tout fini ! Maintenant obtenir sur le plancher, scène ou meubles de choix et de célébrer avec la danse !