97 lines
2.5 KiB
C++
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);
|
|
|
|
}
|