telephone-cadran-arduino/telephone-cadran-arduino.ino
2020-03-29 16:54:56 +02:00

97 lines
2.5 KiB
C++

// Nos librairies
#include <SoftwareSerial.h>
#include <DFPlayerMini_Fast.h>
// 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);
}