// Nos librairies #include #include // Port série logiciel permettant de dialoguer avec le lecteur MP3 (pins RX et TX) SoftwareSerial audioSerie(10, 11); // Objet de contrôle de notre lecteur MP3 DFPlayerMini_Fast audio; // Pin sur lequel recevoir nos impulsions de cadran int pinImpulsionCadran = 13; // Pin sur lequel savoir si l'utilisateur est train de composer un chiffre ou non int pinEtatCadran = 7; // Fonction exécutée au démarrage de l'arduino void setup() { // On passe les pin de notre cadran en mode entrée pinMode(pinImpulsionCadran, INPUT); pinMode(pinEtatCadran, INPUT); // On active la communication série sur USB (à 9600 bauds) Serial.begin(9600); // On active la communication série sur notre port logiciel audioSerie.begin(9600); // On initialise la connexion entre l'arduino et le lecteur mp3 audio.begin(audioSerie); // On défini le volume de sortie (entre 0 et 20) audio.volume(15); } // Variables d'état int numeroCompose = 0; int nombreImpulsionsSuccessives = 0; // Boucle d'exécution : s'exécute indéfiniement void loop() { // On lit nos valeurs au niveau du cadran int valeurPinImpulsionCadran = digitalRead(pinImpulsionCadran); int valeurPinEtatCadran = digitalRead(pinEtatCadran); // Pas de composition if(valeurPinImpulsionCadran == 1 && valeurPinEtatCadran == 1) { // Un numéro était-il en cours de composition ? if(numeroCompose > 0) { Serial.print("Appel du numéro "); Serial.println(numeroCompose); // On lit le bon fichier audio.play(numeroCompose); } // On remet à zéro nos valeurs numeroCompose = 0; nombreImpulsionsSuccessives = 0; } // Composition et impulsion en cours else if(valeurPinImpulsionCadran == 1 && valeurPinEtatCadran == 0) { // On incrémente le nombre d'impulsions nombreImpulsionsSuccessives++; } // Composition en cours, mais pas d'impulsion else if(valeurPinImpulsionCadran == 0 && valeurPinEtatCadran == 0) { // Si une impulsion a été détectée et qu'elle est inférieure à 150 (au dessus, on considère que c'est du parasitage // Alors, on incrémente le numéro if(nombreImpulsionsSuccessives > 0 && nombreImpulsionsSuccessives < 150) { numeroCompose++; } // On remet à zéro le compteur d'impulsions nombreImpulsionsSuccessives = 0; } // On suspend l'exécution pour 1 millisecondes delay(1); }