Étape 8: Notes de musique de jeu
Car la fonction buzz() dans l’esquisse de l’exemple permet une fréquence de hauteur à préciser, il est temps de chercher les fréquences ce qui font des notes de musique et de testent une gamme musicale.
Recherche Google pour [fréquences note musicale] a révélé ce grand tableau contenant les fréquences d’une grande diversité musicale. Qui a aidé à répondre à la question « Comment faire buzzer faire des tonalités musicales? ».
Un croquis de jouer une octave de notes pourrait ressembler à ceci :
---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
void setup() {}
pinMode (sortie 4) ; mettre une épingle pour la sortie de l’avertisseur sonore
}
void loop() {}
Buzz (4, 996, 1000) ; pin, fréquence de la note, jouer durée en millisecondes
Buzz (4, 1050, 1000) ;
Buzz (4, 1110, 1000) ;
Buzz (4, 1180, 1000) ;
Buzz (4, 1 250, 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) ; attendre un peu entre les bourdonnements
}
{} 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---
Cela fonctionne, mais en levant les fréquences sur un tableau chaque fois qu’une note est créée serait trop lourd pour certains. Le croquis ci-dessous ajoute un tableau de fréquences de référence et une nouvelle fonction de playNote() qui joue une fréquence référencée dans le tableau par numéro et appelle la fonction buzz avec cette fréquence.
Une remarque sur les tableaux, est qu’ils commencent par 0, pas de 1. Donc le premier élément de noteFreqArr ci-dessous sera référencé comme noteFreqArr [0], le second devrait être noteFreqArr [1] et ainsi de suite.
---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
référencé à partir de http://www.phy.mtu.edu/~suits/notefreqs.html
commençant par 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 (sortie 4) ; mettre une épingle pour la sortie de l’avertisseur sonore
}
void playNote (int noteInt, longue durée, long souffle = 0) {}
longueur = longueur - souffle ;
Buzz (4, noteFreqArr [noteInt], longueur) ;
if(Breath > 0) {//take une courte pause ou « souffle » si spécifié
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) ; attendre un peu entre les bourdonnements
}
{} 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---
Cool ! Maintenant, pour faire de la musique à l’étape suivante...