diff --git a/README.md b/README.md index 79027e9..5a46f77 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ -# telephone-cadran-arduino +# Logiciel d'interfaçage d'un téléphone à cadran pour Arduino -Programme adapté à l'Arduino Uno et au module DFPlayer Mini permettant de lire un fichier MP3 spécifique sur un téléphone à cadran modèle PTT en fonction du numéro de téléphone composé. \ No newline at end of file +Ce logiciel a été réalisé dans le cadre d'un atelier proposé par l'association [Nevers Libre](https://nevers-libre.org/). + +## Matériel utilisé + +* Arduino Uno +* Module DFPlayer Mini (avec carte microSD) +* Téléphone à cadran modèle PTT diff --git a/telephone-cadran-arduino.ino b/telephone-cadran-arduino.ino new file mode 100644 index 0000000..6e294d6 --- /dev/null +++ b/telephone-cadran-arduino.ino @@ -0,0 +1,96 @@ +// 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); + +}