Étape 12 : Signal d’alarme
Il est assez facile de générer le son sur l’arduino en utilisant juste digitalWrite() et delay() pour activer/désactiver l’état de la broche du haut-parleur dans la bonne fréquence. Mais pour ce projet, j’ai besoin de constamment vérifier les boutons, mettre à jour l’horloge et mettre à jour l’affichage, même lorsque le signal d’alarme se joue. C’est pourquoi la génération sonore doit être non-bloquant, ce qui signifie que vous n’avez pas à attendre pour les tons à la fin avant que vous pouvez faire autre chose.C’est pourquoi j’ai utilisé la bibliothèque de ton écrit par Brett Hagman générer son. C’est une bibliothèque très agréable qui le rend facile à jouer des tonalités différentes, et le meilleur de tous, il est non-bloquante.
Parce que la la mélodie devrait être non bloquant je ne pouvais pas juste utiliser une boucle pour parcourir les tons. Au lieu de cela j’ai utilisé des instructions if. chaque fois que la fonction de mélodie est appelé vérifie si le ton dernier a cessé de jouer, si elle a il recommencera à celle qui suit. La « mélodie », j’ai utilisé est juste, C, D, E, F, G, A, B, C d’abord joué un après l’autre, puis tous les autres, puis chaque troisième et ainsi de suite.
_______________________________________________________________________
La fonction play_melody() :
FONCTION DE VARIABLES « INTERNE » POUR PLAY_MELODY :
la mélodie d’int [] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4,
NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5} ;
int melody_length = sizeof(melody) / 2 ; Longueur de la mélodie, pour une boucle.
sizeof() renvoie la taille du tableau en octets et parce que
int est de 2 octets, sizeof retourne 2 * (nombre d’éléments du tableau)
int i = 0 ; variable de boucle
Boolean reset_loop = true ;
int saut = 1 ; Combien de notes de sauter dans le tableau de la mélodie
int position = 0 ; position dans le tableau de mélodie
Sub play_melody()
{
Si (! () tone_maker.isPlaying())) / / si le ton dernier n’a cessé
{
if(i {
tone_maker.Stop() ;
tone_maker.Play (mélodie [position], 300) ;
Une pause entre les notes...
Delay(300) ; remplacer par non bloquant.
si (déboguer)
{/ / Si le débogage, rapport boucle, ton, rythme et la durée
Serial.Print(position) ;
Serial.Print(":") ;
Serial.Print(Melody[position]) ;
Serial.Print("\n") ;
}
position += saut ;
Si la position est plus grande que le tableau, démarrer à partir début du tableau :
Position = position % melody_length ;
i ++ ;
}
d’autre
{
saut ++ ;
i = 0 ;
}
}
}
_______________________________________________________________________