Bonjour à tous,
Nouveau venu dans le monde de l'Arduino, j'essaie de me former afin de créer des mécanismes afin d'ouvrir une salle (et par la suite d'autres) d'escape game.
J'ai trouvé un code que j'ai légèrement modifié, afin de créer un téléphone qui, lorsqu'on compose un bon numéro, laisse diffuser des messages programmés.
Or lorsque je fais le montage et téléverse mon code, tout se passe bien jusqu'à ce que l'on raccroche le téléphone. Lorsqu'on le décroche à nouveau et que l'on veut recomposer un numéro rien ne se passe (le problème existait même avant modification).
Je pense que j'ai un soucis dans mon loop afin de réinitialiser le système mais je sèche et ne trouve pas comment faire. Quelqu'un aurait-il l'amabilité de me donner un coup de pouce si il voit une solution ?
Merci d'avance !
Voici le code :
#include <SoftwareSerial.h> // Inclut la bibliothèque SoftwareSerial, utilisée pour la communication série logicielle
#include <DFRobotDFPlayerMini.h> // Inclut la bibliothèque DFRobotDFPlayerMini, utilisée pour contrôler le lecteur MP3
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////// DEBUT ZONE A MODIFIER //////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
const byte nbNum = 4; // Déclare une constante "nbNum" de type byte, représentant le nombre de numéros à identifier
const String t_num_tel[nbNum] = {"234","462","904","370"}; // Déclare un tableau de chaînes de caractères "t_num_tel" contenant les numéros de téléphone à identifier
const byte t_mp3_tel[] = {15,16,17,18}; // Déclare un tableau d'octets "t_mp3_tel" contenant les numéros de piste MP3 associés aux numéros de téléphone
// Remarque : les fichiers MP3 doivent être copiés dans le répertoire "mp3" de la carte micro SD
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////// FIN ////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define impulsions 13 // Définit la broche 13 comme la broche pour les impulsions du cadran (fil rouge)
#define rotation 12 // Définit la broche 12 comme la broche pour la rotation du cadran (fil bleu)
#define df_rx 11 // Définit la broche 11 comme la broche RX du DFPlayer Mini
#define df_tx 10 // Définit la broche 10 comme la broche TX du DFPlayer Mini
#define combine 7 // Définit la broche 7 comme la broche pour le capteur de décrochage/raccrochage
#define finMP3 4 // Définit la broche 4 comme la broche pour le signal "Busy" du DFPlayer Mini
int chiffre; // Déclare une variable "chiffre" de type entier pour stocker le chiffre composé
byte etat=0; // Déclare une variable "etat" de type octet pour stocker l'état de lecture des impulsions
byte appel=false; // Déclare une variable "appel" de type octet pour indiquer si un appel est en cours
String numtel=""; // Déclare une variable "numtel" de type chaîne de caractères pour stocker le numéro composé
byte son_tonalite = 1; // Déclare une constante "son_tonalite" de type octet pour le son de la tonalité (piste 1)
byte son_raccroche = 2; // Déclare une constante "son_raccroche" de type octet pour le son du raccrochage (piste 2)
byte son_numinconnuA = 3; // Déclare une constante "son_numinconnuA" de type octet pour le son de numéro inconnu (partie 1) (piste 3)
byte son_numinconnuB = 4; // Déclare une constante "son_numinconnuB" de type octet pour le son de numéro inconnu (partie 2) (piste 4)
byte lgNum = t_num_tel[0].length(); // Déclare une variable "lgNum" de type octet pour stocker la longueur des numéros de téléphone
SoftwareSerial dfSerial(df_tx, df_rx); // Crée un objet dfSerial pour la communication série logicielle avec le DFPlayer Mini
DFRobotDFPlayerMini dfPlayer; // Crée un objet dfPlayer pour contrôler le DFPlayer Mini
void setup() {
pinMode(impulsions, INPUT_PULLUP); // Configure la broche impulsions en entrée avec résistance de pull-up activée
pinMode(rotation, INPUT_PULLUP); // Configure la broche rotation en entrée avec résistance de pull-up activée
pinMode(combine , INPUT_PULLUP); // Configure la broche combine en entrée avec résistance de pull-up activée
pinMode(finMP3, INPUT_PULLUP); // Configure la broche finMP3 en entrée avec résistance de pull-up activée
dfSerial.begin(9600); // Initialise la communication série avec une vitesse de 9600 bauds
dfPlayer.begin(dfSerial); // Initialise le DFPlayer Mini avec la communication série
dfPlayer.volume(15); // Régle le volume du DFPlayer Mini à 15 (maximum)
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer Mini
}
void loop() {
if(digitalRead(combine)==LOW) { // Si le combiné est décroché
if ((numtel.length()==0) && (digitalRead(4)!=LOW)) { // Si aucun numéro n'est composé et que le DFPlayer n'est pas occupé
dfPlayer.playMp3Folder(son_tonalite); // Joue la tonalité
delay(300); // Attend 300 millisecondes
}
if ((digitalRead(rotation)==LOW)&&(!appel)) { // Si le cadran est activé et aucun appel en cours
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
chiffre=0; // Initialise la variable chiffre à 0
while(digitalRead(rotation)==LOW) { // Tant que le cadran est activé
int reading = digitalRead(impulsions); // Lit l'état de la broche impulsions
if (etat != reading) { // Si l'état a changé
if (reading == LOW) chiffre++; // Si l'état est LOW, incrémente la variable chiffre
etat = reading; // Met à jour l'état
}
delay(20); // Attend 20 millisecondes
}
if(chiffre>=10) chiffre=0; // Si chiffre est supérieur ou égal à 10, réinitialise à 0
numtel+=chiffre; // Ajoute le chiffre à la fin du numéro composé
if (numtel.length()==lgNum) { // Si le numéro composé atteint la longueur spécifiée
byte i; // Déclare une variable locale i de type octet
for (i=0;i<nbNum;i++) { // Boucle à travers tous les numéros à identifier
if (numtel==t_num_tel[i]) { // Si le numéro composé correspond à un numéro à identifier
dfPlayer.playMp3Folder(t_mp3_tel[i]); // Joue la piste MP3 associée
break; // Sort de la boucle
}
}
if (i==nbNum) { // Si aucun numéro correspondant n'a été trouvé
dfPlayer.playMp3Folder(son_numinconnuA); // Joue la première partie du message de numéro inconnu
delay(200); // Attend 200 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
for (byte i=0;i<lgNum;i++) { // Boucle à travers chaque chiffre du numéro composé
dfPlayer.playMp3Folder(int(numtel[i])-43); // Joue le fichier MP3 correspondant à chaque chiffre
delay(200); // Attend 200 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
}
dfPlayer.playMp3Folder(son_numinconnuB); // Joue la deuxième partie du message de numéro inconnu
}
delay(500); // Attend 500 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
appel=true; // Indique qu'un appel est en cours
}
}
if (appel) { // Si un appel est en cours
dfPlayer.playMp3Folder(son_raccroche); // Joue le son de raccrochage
delay(500); // Attend 500 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
}
} else { // Si le combiné est raccroché
if (dfPlayer.readState()) dfPlayer.stop(); // Si le DFPlayer est en cours de lecture, l'arrête
appel=false; // Réinitialise l'état de l'appel
numtel=""; // Réinitialise le numéro composé
}
}
Du coup quand tu décroche à nouveau, tu n'a pas de tonalité jouer par ton DFPlayer ?
SI tu as le moyen de testé avec ton Arduino connecté à ton PC, tu pourrais utiliser des Serial.println, pour savoir l'état de tes variable
Tu me fais un peu peur
Comment tu téléverse ton programme et avec quel logiciel ?
Sinon lorsque ton Arduino est connecté à ton PC et que tu as affiché le moniteur série, si tu suis l'exemple de cette page, tu devrais voir des choses apparaitre dans la fenêtre du moniteur série.
Attention dans l'exemple, ils utilisent plusieurs port série, toi seulement les instructions avec "Serial" sans chiffre, t'intéresse.
Non c'est juste cette commande que je n'ai jamais utilisé.
Je téléverse avec Arduino IDE et dans mon moniteur série, justement rien ne s'affiche même lorsque tout fonctionne bien au premier tour.
Normalement, au démarrage du programme il devrait avoir, dans le moniteur:
loop()
Conbine raccroche
loop()
Conbine raccroche
loop()
Conbine raccroche
...
Je n'ai pas de DFplayer connectée, je ne peut pas essayer "en vrai".
Le programme:
#include <SoftwareSerial.h> // Inclut la bibliothèque SoftwareSerial, utilisée pour la communication série logicielle
#include <DFRobotDFPlayerMini.h> // Inclut la bibliothèque DFRobotDFPlayerMini, utilisée pour contrôler le lecteur MP3
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////// DEBUT ZONE A MODIFIER //////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
const byte nbNum = 4; // Déclare une constante "nbNum" de type byte, représentant le nombre de numéros à identifier
const String t_num_tel[nbNum] = {"234","462","904","370"}; // Déclare un tableau de chaînes de caractères "t_num_tel" contenant les numéros de téléphone à identifier
const byte t_mp3_tel[] = {15,16,17,18}; // Déclare un tableau d'octets "t_mp3_tel" contenant les numéros de piste MP3 associés aux numéros de téléphone
// Remarque : les fichiers MP3 doivent être copiés dans le répertoire "mp3" de la carte micro SD
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////// FIN ////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define impulsions 13 // Définit la broche 13 comme la broche pour les impulsions du cadran (fil rouge)
#define rotation 12 // Définit la broche 12 comme la broche pour la rotation du cadran (fil bleu)
#define df_rx 11 // Définit la broche 11 comme la broche RX du DFPlayer Mini
#define df_tx 10 // Définit la broche 10 comme la broche TX du DFPlayer Mini
#define combine 7 // Définit la broche 7 comme la broche pour le capteur de décrochage/raccrochage
#define finMP3 4 // Définit la broche 4 comme la broche pour le signal "Busy" du DFPlayer Mini
int chiffre; // Déclare une variable "chiffre" de type entier pour stocker le chiffre composé
byte etat=0; // Déclare une variable "etat" de type octet pour stocker l'état de lecture des impulsions
byte appel=false; // Déclare une variable "appel" de type octet pour indiquer si un appel est en cours
String numtel=""; // Déclare une variable "numtel" de type chaîne de caractères pour stocker le numéro composé
byte son_tonalite = 1; // Déclare une constante "son_tonalite" de type octet pour le son de la tonalité (piste 1)
byte son_raccroche = 2; // Déclare une constante "son_raccroche" de type octet pour le son du raccrochage (piste 2)
byte son_numinconnuA = 3; // Déclare une constante "son_numinconnuA" de type octet pour le son de numéro inconnu (partie 1) (piste 3)
byte son_numinconnuB = 4; // Déclare une constante "son_numinconnuB" de type octet pour le son de numéro inconnu (partie 2) (piste 4)
byte lgNum = t_num_tel[0].length(); // Déclare une variable "lgNum" de type octet pour stocker la longueur des numéros de téléphone
SoftwareSerial dfSerial(df_tx, df_rx); // Crée un objet dfSerial pour la communication série logicielle avec le DFPlayer Mini
DFRobotDFPlayerMini dfPlayer; // Crée un objet dfPlayer pour contrôler le DFPlayer Mini
void setup() {
Serial.begin(115200);
pinMode(impulsions, INPUT_PULLUP); // Configure la broche impulsions en entrée avec résistance de pull-up activée
pinMode(rotation, INPUT_PULLUP); // Configure la broche rotation en entrée avec résistance de pull-up activée
pinMode(combine , INPUT_PULLUP); // Configure la broche combine en entrée avec résistance de pull-up activée
pinMode(finMP3, INPUT_PULLUP); // Configure la broche finMP3 en entrée avec résistance de pull-up activée
dfSerial.begin(9600); // Initialise la communication série avec une vitesse de 9600 bauds
dfPlayer.begin(dfSerial); // Initialise le DFPlayer Mini avec la communication série
dfPlayer.volume(15); // Régle le volume du DFPlayer Mini à 15 (maximum)
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer Mini
}
void loop() {
Serial.println("loop()");
if(digitalRead(combine)==LOW) { // Si le combiné est décroché
Serial.println("Conbine decroche");
if ((numtel.length()==0) && (digitalRead(4)!=LOW)) { // Si aucun numéro n'est composé et que le DFPlayer n'est pas occupé
dfPlayer.playMp3Folder(son_tonalite); // Joue la tonalité
delay(300); // Attend 300 millisecondes
}
if ((digitalRead(rotation)==LOW)&&(!appel)) { // Si le cadran est activé et aucun appel en cours
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
chiffre=0; // Initialise la variable chiffre à 0
while(digitalRead(rotation)==LOW) { // Tant que le cadran est activé
int reading = digitalRead(impulsions); // Lit l'état de la broche impulsions
if (etat != reading) { // Si l'état a changé
if (reading == LOW) chiffre++; // Si l'état est LOW, incrémente la variable chiffre
etat = reading; // Met à jour l'état
}
delay(20); // Attend 20 millisecondes
}
if(chiffre>=10) chiffre=0; // Si chiffre est supérieur ou égal à 10, réinitialise à 0
numtel+=chiffre; // Ajoute le chiffre à la fin du numéro composé
if (numtel.length()==lgNum) { // Si le numéro composé atteint la longueur spécifiée
byte i; // Déclare une variable locale i de type octet
for (i=0;i<nbNum;i++) { // Boucle à travers tous les numéros à identifier
if (numtel==t_num_tel[i]) { // Si le numéro composé correspond à un numéro à identifier
dfPlayer.playMp3Folder(t_mp3_tel[i]); // Joue la piste MP3 associée
break; // Sort de la boucle
}
}
if (i==nbNum) { // Si aucun numéro correspondant n'a été trouvé
dfPlayer.playMp3Folder(son_numinconnuA); // Joue la première partie du message de numéro inconnu
delay(200); // Attend 200 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
for (byte i=0;i<lgNum;i++) { // Boucle à travers chaque chiffre du numéro composé
dfPlayer.playMp3Folder(int(numtel[i])-43); // Joue le fichier MP3 correspondant à chaque chiffre
delay(200); // Attend 200 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
}
dfPlayer.playMp3Folder(son_numinconnuB); // Joue la deuxième partie du message de numéro inconnu
}
delay(500); // Attend 500 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
appel=true; // Indique qu'un appel est en cours
}
}
if (appel) { // Si un appel est en cours
dfPlayer.playMp3Folder(son_raccroche); // Joue le son de raccrochage
delay(500); // Attend 500 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
}
} else { // Si le combiné est raccroché
Serial.println("Conbine raccroche");
if (dfPlayer.readState()) dfPlayer.stop(); // Si le DFPlayer est en cours de lecture, l'arrête
appel=false; // Réinitialise l'état de l'appel
numtel=""; // Réinitialise le numéro composé
}
}
Merci pour ta réponse !
Je viens de tester cela en rentrant et effectivement au téléversement quand le téléphone est raccroché il y a bien sur le moniteur cela :
loop()
combine raccroche
puis quand je décroche j'ai bien :
loop()
combine decroche
mais après dès que je compose plus rien ni ensuite en raccrochant je ne retrouve pas le loop() combine raccroche.
Vois-tu ce qui peut clocher ?
Difficile à dire, je vais faire des essais, l'idéal c'est que je reproduise ton montage, tu as un vrai vieux téléphone?
As tu bien relié la pin 4 (finMP3) de l'Arduino à la pin BUSY du DFPlayer?
C'est le seul endroit où je vois que ça pourrai bloquer.
Petite remarque, dans ton programme tu écris: while((digitalRead(4)==LOW)
vu que tu as une variable pour ça, finMP3, c'est mieux d'écrire: while((digitalRead(finMP3)==LOW)
Si tu as compris comment utilisé cette fonction "println", tu peux ajouter justement d'autre sortie sur le moniteur série, pour pister par ou tu passe et l'état de tes variables.
Le plus simple reste que tu debug ton programme toi même
par exemple comme tu utilise pas mal de while, il faut vérifier que tu sors bien de ces while
Toute ma jeunesse, sauf en Suisse, on avait à peu près les mêmes
Pour ton problème, sauf qu'à reproduire ton installation je ne peut que supputer, mais je mettrai des print un peu partout comme ceci, afin de voir l'évolution de ton programme et, éventuellement, voir l'endroit du blocage.
#include <SoftwareSerial.h> // Inclut la bibliothèque SoftwareSerial, utilisée pour la communication série logicielle
#include <DFRobotDFPlayerMini.h> // Inclut la bibliothèque DFRobotDFPlayerMini, utilisée pour contrôler le lecteur MP3
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////// DEBUT ZONE A MODIFIER //////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
const byte nbNum = 4; // Déclare une constante "nbNum" de type byte, représentant le nombre de numéros à identifier
const String t_num_tel[nbNum] = {"234","462","904","370"}; // Déclare un tableau de chaînes de caractères "t_num_tel" contenant les numéros de téléphone à identifier
const byte t_mp3_tel[] = {15,16,17,18}; // Déclare un tableau d'octets "t_mp3_tel" contenant les numéros de piste MP3 associés aux numéros de téléphone
// Remarque : les fichiers MP3 doivent être copiés dans le répertoire "mp3" de la carte micro SD
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////// FIN ////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define impulsions 13 // Définit la broche 13 comme la broche pour les impulsions du cadran (fil rouge)
#define rotation 12 // Définit la broche 12 comme la broche pour la rotation du cadran (fil bleu)
#define df_rx 11 // Définit la broche 11 comme la broche RX du DFPlayer Mini
#define df_tx 10 // Définit la broche 10 comme la broche TX du DFPlayer Mini
#define combine 6 // Définit la broche 7 comme la broche pour le capteur de décrochage/raccrochage
#define finMP3 4 // Définit la broche 4 comme la broche pour le signal "Busy" du DFPlayer Mini
int chiffre; // Déclare une variable "chiffre" de type entier pour stocker le chiffre composé
byte etat=0; // Déclare une variable "etat" de type octet pour stocker l'état de lecture des impulsions
byte appel=false; // Déclare une variable "appel" de type octet pour indiquer si un appel est en cours
String numtel=""; // Déclare une variable "numtel" de type chaîne de caractères pour stocker le numéro composé
byte son_tonalite = 1; // Déclare une constante "son_tonalite" de type octet pour le son de la tonalité (piste 1)
byte son_raccroche = 2; // Déclare une constante "son_raccroche" de type octet pour le son du raccrochage (piste 2)
byte son_numinconnuA = 3; // Déclare une constante "son_numinconnuA" de type octet pour le son de numéro inconnu (partie 1) (piste 3)
byte son_numinconnuB = 4; // Déclare une constante "son_numinconnuB" de type octet pour le son de numéro inconnu (partie 2) (piste 4)
byte lgNum = t_num_tel[0].length(); // Déclare une variable "lgNum" de type octet pour stocker la longueur des numéros de téléphone
SoftwareSerial dfSerial(df_tx, df_rx);; // Crée un objet dfSerial pour la communication série logicielle avec le DFPlayer Mini
DFRobotDFPlayerMini dfPlayer; // Crée un objet dfPlayer pour contrôler le DFPlayer Mini
void setup() {
Serial.begin(115200);
pinMode(impulsions, INPUT_PULLUP); // Configure la broche impulsions en entrée avec résistance de pull-up activée
pinMode(rotation, INPUT_PULLUP); // Configure la broche rotation en entrée avec résistance de pull-up activée
pinMode(combine , INPUT_PULLUP); // Configure la broche combine en entrée avec résistance de pull-up activée
pinMode(finMP3, INPUT_PULLUP); // Configure la broche finMP3 en entrée avec résistance de pull-up activée
dfSerial.begin(9600); // Initialise la communication série avec une vitesse de 9600 bauds
dfPlayer.begin(dfSerial); // Initialise le DFPlayer Mini avec la communication série
dfPlayer.volume(15); // Régle le volume du DFPlayer Mini à 15 (maximum)
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer Mini
}
void loop() {
//Serial.println("Loop");
if(digitalRead(combine)==LOW) { // Si le combiné est décroché
Serial.println("> 0 <");
if ((numtel.length()==0) && (digitalRead(4)!=LOW)) { // Si aucun numéro n'est composé et que le DFPlayer n'est pas occupé
Serial.println("\tTonalite");
dfPlayer.playMp3Folder(son_raccroche); // Joue la tonalité
delay(1300); // Attend 300 millisecondes
}
if ((digitalRead(rotation)==LOW)&&(!appel)) { // Si le cadran est activé et aucun appel en cours
Serial.println("> 1 <");
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
chiffre=0; // Initialise la variable chiffre à 0
while(digitalRead(rotation)==LOW) { // Tant que le cadran est activé
int reading = digitalRead(impulsions); // Lit l'état de la broche impulsions
if (etat != reading) { // Si l'état a changé
if (reading == LOW) chiffre++; // Si l'état est LOW, incrémente la variable chiffre
etat = reading; // Met à jour l'état
}
delay(20); // Attend 20 millisecondes
}
if(chiffre>=10) chiffre=0; // Si chiffre est supérieur ou égal à 10, réinitialise à 0
numtel+=chiffre; // Ajoute le chiffre à la fin du numéro composé
if (numtel.length()==lgNum) { // Si le numéro composé atteint la longueur spécifiée
Serial.println("> 2 <");
byte i; // Déclare une variable locale i de type octet
for (i=0;i<nbNum;i++) { // Boucle à travers tous les numéros à identifier
if (numtel==t_num_tel[i]) { // Si le numéro composé correspond à un numéro à identifier
dfPlayer.playMp3Folder(t_mp3_tel[i]); // Joue la piste MP3 associée
break; // Sort de la boucle
}
}
if (i==nbNum) { // Si aucun numéro correspondant n'a été trouvé
Serial.println("> 3 <");
dfPlayer.playMp3Folder(son_numinconnuA); // Joue la première partie du message de numéro inconnu
delay(200); // Attend 200 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
for (byte i=0;i<lgNum;i++) { // Boucle à travers chaque chiffre du numéro composé
dfPlayer.playMp3Folder(int(numtel[i])-43); // Joue le fichier MP3 correspondant à chaque chiffre
delay(200); // Attend 200 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
}
dfPlayer.playMp3Folder(son_numinconnuB); // Joue la deuxième partie du message de numéro inconnu
}
delay(500); // Attend 500 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
appel=true; // Indique qu'un appel est en cours
}
}
if (appel) { // Si un appel est en cours
Serial.println("> 4 <");
dfPlayer.playMp3Folder(son_raccroche); // Joue le son de raccrochage
delay(500); // Attend 500 millisecondes
while((digitalRead(finMP3)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
}
} else { // Si le combiné est raccroché
Serial.println("> 5 <");
if (dfPlayer.readState()) dfPlayer.stop(); // Si le DFPlayer est en cours de lecture, l'arrête
Serial.println("> 6 <");
appel=false; // Réinitialise l'état de l'appel
numtel=""; // Réinitialise le numéro composé
Serial.println("> 7 <");
}
}
Je vais voir en faisant cela. Par contre quand je téléverse ce dernier code plus rien ne se passe. Je pense que les serial.print ne sont pas au bon endroit. je vais les déplacer et voir cela.
Bonsoir jpbbricole,
Alors après plusieurs tests, tout revient pareil. Les serials print que tu avait mis dans le code fonctionnent. Sur le moniteur série j'ai bien le 0 puis Tonalité puis 1 pour la rotation, 2 pour le numéro composé et quand on raccroche le 4 mais rien après quand je ressaie de décrocher. J'ai beau regardé le code et quelques modifs ; et le circuit rien ne cloche...
#include <SoftwareSerial.h> // Inclut la bibliothèque SoftwareSerial, utilisée pour la communication série logicielle
#include <DFRobotDFPlayerMini.h> // Inclut la bibliothèque DFRobotDFPlayerMini, utilisée pour contrôler le lecteur MP3
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////// DEBUT ZONE A MODIFIER //////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
const byte nbNum = 4; // Déclare une constante "nbNum" de type byte, représentant le nombre de numéros à identifier
const String t_num_tel[nbNum] = {"234","462","904","370"}; // Déclare un tableau de chaînes de caractères "t_num_tel" contenant les numéros de téléphone à identifier
const byte t_mp3_tel[] = {15,16,17,18}; // Déclare un tableau d'octets "t_mp3_tel" contenant les numéros de piste MP3 associés aux numéros de téléphone
// Remarque : les fichiers MP3 doivent être copiés dans le répertoire "mp3" de la carte micro SD
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////// FIN ////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define impulsions 13 // Définit la broche 13 comme la broche pour les impulsions du cadran (fil rouge)
#define rotation 12 // Définit la broche 12 comme la broche pour la rotation du cadran (fil bleu)
#define df_rx 11 // Définit la broche 11 comme la broche RX du DFPlayer Mini
#define df_tx 10 // Définit la broche 10 comme la broche TX du DFPlayer Mini
#define combine 7 // Définit la broche 7 comme la broche pour le capteur de décrochage/raccrochage
#define finMP3 4 // Définit la broche 4 comme la broche pour le signal "Busy" du DFPlayer Mini
int chiffre; // Déclare une variable "chiffre" de type entier pour stocker le chiffre composé
byte etat=0; // Déclare une variable "etat" de type octet pour stocker l'état de lecture des impulsions
byte appel=false; // Déclare une variable "appel" de type octet pour indiquer si un appel est en cours
String numtel=""; // Déclare une variable "numtel" de type chaîne de caractères pour stocker le numéro composé
byte son_tonalite = 1; // Déclare une constante "son_tonalite" de type octet pour le son de la tonalité (piste 1)
byte son_raccroche = 2; // Déclare une constante "son_raccroche" de type octet pour le son du raccrochage (piste 2)
byte son_numinconnuA = 3; // Déclare une constante "son_numinconnuA" de type octet pour le son de numéro inconnu (partie 1) (piste 3)
byte son_numinconnuB = 4; // Déclare une constante "son_numinconnuB" de type octet pour le son de numéro inconnu (partie 2) (piste 4)
byte lgNum = t_num_tel[0].length(); // Déclare une variable "lgNum" de type octet pour stocker la longueur des numéros de téléphone
SoftwareSerial dfSerial(df_tx, df_rx);; // Crée un objet dfSerial pour la communication série logicielle avec le DFPlayer Mini
DFRobotDFPlayerMini dfPlayer; // Crée un objet dfPlayer pour contrôler le DFPlayer Mini
void setup() {
Serial.begin(115200);
pinMode(impulsions, INPUT_PULLUP); // Configure la broche impulsions en entrée avec résistance de pull-up activée
pinMode(rotation, INPUT_PULLUP); // Configure la broche rotation en entrée avec résistance de pull-up activée
pinMode(combine , INPUT_PULLUP); // Configure la broche combine en entrée avec résistance de pull-up activée
pinMode(finMP3, INPUT_PULLUP); // Configure la broche finMP3 en entrée avec résistance de pull-up activée
dfSerial.begin(9600); // Initialise la communication série avec une vitesse de 9600 bauds
dfPlayer.begin(dfSerial); // Initialise le DFPlayer Mini avec la communication série
dfPlayer.volume(15); // Régle le volume du DFPlayer Mini à 15 (maximum)
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer Mini
}
void loop() {
//Serial.println("Loop");
if(digitalRead(combine)==LOW) { // Si le combiné est décroché
Serial.println("> 0 <");
if ((numtel.length()==0) && (digitalRead(4)!=LOW)) { // Si aucun numéro n'est composé et que le DFPlayer n'est pas occupé
Serial.println("\Tonalite");
dfPlayer.playMp3Folder(son_tonalite); // Joue la tonalité
delay(300); // Attend 300 millisecondes
}
if ((digitalRead(rotation)==LOW)&&(!appel)) { // Si le cadran est activé et aucun appel en cours
Serial.println("> 1 <");
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
chiffre=0; // Initialise la variable chiffre à 0
while(digitalRead(rotation)==LOW) { // Tant que le cadran est activé
int reading = digitalRead(impulsions); // Lit l'état de la broche impulsions
if (etat != reading) { // Si l'état a changé
if (reading == LOW) chiffre++; // Si l'état est LOW, incrémente la variable chiffre
etat = reading; // Met à jour l'état
}
delay(20); // Attend 20 millisecondes
}
if(chiffre>=10) chiffre=0; // Si chiffre est supérieur ou égal à 10, réinitialise à 0
numtel+=chiffre; // Ajoute le chiffre à la fin du numéro composé
if (numtel.length()==lgNum) { // Si le numéro composé atteint la longueur spécifiée
Serial.println("> 2 <");
byte i; // Déclare une variable locale i de type octet
for (i=0;i<nbNum;i++) { // Boucle à travers tous les numéros à identifier
if (numtel==t_num_tel[i]) { // Si le numéro composé correspond à un numéro à identifier
dfPlayer.playMp3Folder(t_mp3_tel[i]); // Joue la piste MP3 associée
break; // Sort de la boucle
}
}
if (i==nbNum) { // Si aucun numéro correspondant n'a été trouvé
Serial.println("> 3 <");
dfPlayer.playMp3Folder(son_numinconnuA); // Joue la première partie du message de numéro inconnu
delay(200); // Attend 200 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
for (byte i=0;i<lgNum;i++) { // Boucle à travers chaque chiffre du numéro composé
dfPlayer.playMp3Folder(int(numtel[i])-43); // Joue le fichier MP3 correspondant à chaque chiffre
delay(200); // Attend 200 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
}
dfPlayer.playMp3Folder(son_numinconnuB); // Joue la deuxième partie du message de numéro inconnu
}
delay(500); // Attend 500 millisecondes
while((digitalRead(4)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
appel=true; // Indique qu'un appel est en cours
}
}
if (appel) { // Si un appel est en cours
Serial.println("> 4 <");
dfPlayer.playMp3Folder(son_raccroche); // Joue le son de raccrochage
delay(500); // Attend 500 millisecondes
while((digitalRead(finMP3)==LOW)&&(digitalRead(combine)==LOW)); // Attend que le DFPlayer ne soit plus occupé
dfPlayer.stop(); // Arrête la lecture en cours du DFPlayer
}
} else { // Si le combiné est raccroché
Serial.println("> 5 <");
if (dfPlayer.readState()) dfPlayer.stop(); // Si le DFPlayer est en cours de lecture, l'arrête
Serial.println("> 6 <");
appel=false; // Réinitialise l'état de l'appel
numtel=""; // Réinitialise le numéro composé
Serial.println("> 7 <");
}
}