#define Buzzer_broche 13
// Jingle Bells
int melodie[] = {
659, 659, 659,
659, 659, 659,
659, 784, 523, 587,
659,
698, 698, 698, 698,
698, 659, 659, 659, 659,
659, 587, 587, 659,
587, 784
};
int tempo[] = {
8, 8, 4,
8, 8, 4,
8, 8, 8, 8,
2,
8, 8, 8, 8,
8, 8, 8, 16, 16,
8, 8, 8, 8,
4, 4
};
void setup(void) {
pinMode(13, OUTPUT); // Buzzer
}
void loop() {
chanson();
}
int song = 0;
void chanson() {
int size = sizeof(melodie) / sizeof(int);
for (int la_Note = 0; la_Note < size; la_Note++) {
int duree_note = 1000 / tempo[la_Note]; // Pour calculer la durée de la note, on prends une seconde divisé par le type de note
buzz(Buzzer_broche, melodie[la_Note], duree_note); // On appelle la fonction buzz
delay(duree_note * 1.30); // On fait une pause entre les notes.
buzz(Buzzer_broche, 0, duree_note); // On arrete de jouer la note
}
}
void buzz(int pin_buzzer, long frequence, long length) {
long temps_attente = 1000000 / frequence / 2; // On calcul la valeur entre chaque transition
long numCycles = frequence * length / 1000; // On calcul le nombre de cycle
for (long i = 0; i < numCycles; i++) { //On fait une boucle pour joeur toute les notes
digitalWrite(pin_buzzer, HIGH); // On joue la note
delayMicroseconds(temps_attente); // On attend le temps calculé pour avoir la bonne note
digitalWrite(pin_buzzer, LOW); // On arrête de jouer la note
delayMicroseconds(temps_attente); // On attend le temps calculé pour avoir la bonne note
}
}