Téléphone escape game

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é
  }
}


Ton code est illisible :frowning:
Car tu n'a pas respecter les directives données dans le post épinglé sur les bonnes pratiques.

Désolé, mauvaise manipulation et première publi, est-ce mieux ainsi

Oui, c'est parfait :+1:

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

Bonsoir @bebuhorse et Bienvenue

Fil de discussion retiré du sous forum dédié à ce qui est complet et fonctionnel
image

Pour savoir où et comment demander de l'aide, consultes les 'Bonnes Pratiques du Forum Francophone'

Merci de ton retour, peux tu m'expliquer comment faire cela, c'est quelque chose que je ne maitrise pas.

Tu me fais un peu peur :face_with_thermometer:
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.

Oui, tu n'utilise le port série donc cela me parait normale :slight_smile:
Si tu utilise la commande que je t'ai indiqué, tu devrais voir des choses.

Bonjour bebuhorse

Comme exemple, je t'ai mis des commandes Serial.println dans ton programme, c'est initialisé ici:
Serial.begin(115200);
et utilisé à 3 places:

	Serial.println("loop()");
		Serial.println("Conbine decroche");
		Serial.println("Conbine raccroche");

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é
	}
}

PS: Mets ton moniteur série
image

à 115200
image

A+
Cordialement
jpbbricole

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 ?

Bonsoir bebuhorse

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?
image
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) :wink:

A+
Cordialement
jpbbricole

Alors oui un vieux socotel

1 Like

oui j'ai bien relié le busy

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 :slight_smile:
par exemple comme tu utilise pas mal de while, il faut vérifier que tu sors bien de ces while

Bonsoir bebuhorse

Toute ma jeunesse, sauf en Suisse, on avait à peu près les mêmes :wink:

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 <");
	}
}

A+
Cordialement
jpbbricole

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.

Bonjour bebuhorse

Je n'ai pas les mêmes ports série pour la DFRobot:
dfSerial(8, 10);
et j'ai oublié de corriger avant de téléverser :woozy_face:
dfSerial(df_tx, df_rx);

Oui, n'hésite pas à mettre toi même des Serial.println un peu partout et si tu bloque à nous envoyer le code et la sortie, ainsi ce que tu as fait :slight_smile:

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 <");
	}
}