Comment associé dans le code les leds avec le dfplayer mp3?

Bonjour à tous,
Je vous explique mon projet en quelque mots, n'étant pas un projet compliqué, je cherche a mettre en même temps que le son diffusé par un dfplayer mp3 les leds branchées en série.
Les leds étant dans des canons imprimé en 3d je cherche à les allumer en même temps que le son " déflagration".
Etant novice je cherche à comprendre comment je pourrais faire pour que dans le void loop, les led s'allume en même temps que l'exécution du programme mp3_play...
De plus mes son que j'ai enregistré sur la sd card au format " 0001.mp3" et suivant n'execute pas correctement le son des idées d'ou peut provenir le problème ?
ci dessous je vous mets le programme qui me fait galérer et si quelqu'un peut m'aider à faire en sorte que mon programme et mon projet fonctionne...
merci d'avance !

<#include "SoftwareSerial.h"
#include "DFPlayer_Mini_Mp3.h"

SoftwareSerial mySerial(2, 3); // RX, TX

void setup() {
mySerial.begin(9600);
mp3_set_serial(mySerial);
mp3_set_volume(10); // fixe le son (30 maximum)
mp3_set_EQ(3); // equalizer de 0 à 5
pinMode(13, OUTPUT);
}

void loop() {

delay(10000);
     
mp3_play(1);  // joue mp3/0001.mp3
delay (32000);
    
  
mp3_next();  // joue le prochain mp3
delay(5000); // pause de 5 secondes

digitalWrite(13, HIGH);
delay(1000);
 
digitalWrite(13, LOW);
delay(1000); 

mp3_play(3); // joue mp3/0004.mp3
delay(5000); // pause de 5 secondes

digitalWrite(13, HIGH);
delay(1000);
 
digitalWrite(13, LOW);
delay(1000); 

mp3_next();  // joue le prochain mp3
delay(5000); // pause de 5 secondes  
   
 mp3_play(5); // joue mp3/0004.mp3
delay(27000); // pause de 5 secondes

mp3_next();  // joue le prochain mp3
delay(13000); // pause de 5 secondes  

digitalWrite(13, HIGH);
delay(1000);
 
digitalWrite(13, LOW);
delay(1000); 

 mp3_play(7); // joue mp3/0004.mp3
delay(5000); // pause de 5 secondes

mp3_next();  // joue le prochain mp3
delay(22000); // pause de 5 secondes  

} >

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

Je ne vois aucun problème avec l'encodage dfplayer.

Que veux-tu dire par là?. Qu'il ne le reproduit pas ou le reproduit déformé, etc... ? La led du dfplayer s'allume-t-elle à tout moment ?

Démarrons d'abord le dfplayer puis synchronisons les leds, ce qui n'est pas aussi simple que vous le pensez. Avez-vous un schéma ou un LIEN vers le circuit que vous avez assemblé pour cela ?

Bonjour tchotb

Le plus simple, est de "lire" le signal BUSY
image
qui passe à LOW pendant la durée du son.
Ainsi
tu démarre le son
tu allumes le canon
tu attends, tant que le signal BUSY est à LOW
Tu éteins le canon.
Et ça donne ça, l'exemple ci dessous utilise une autre bibliothèque, DFRobotDFPlayerMini

#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"     // https://www.arduino.cc/reference/en/libraries/dfrobotdfplayermini/

SoftwareSerial mySoftwareSerial(2, 3); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
//void printDetail(uint8_t type, int value);

const int ledCanonPin = 13;     // LED du canon
const int busyPin = 4;     // Pin BUSY du lecteur MP3

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(9600);
	pinMode(busyPin, INPUT_PULLUP);
	
  
  if (!myDFPlayer.begin(mySoftwareSerial)) 
	{ 
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  Serial.println(F("DFPlayer Mini online."));
  
  myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
  myDFPlayer.volume(10);  //Set volume value (0~30).

}

void loop()
{
	myDFPlayer.play(1);
	Serial.println("Allumage du canon");
	digitalWrite(ledCanonPin, HIGH);

	delay(50);     // Attente de l'établissement du signal BUSY
	while(digitalRead(busyPin) == LOW){}     // Attente fin morceau MP3
	Serial.println("Extinction du canon");
	digitalWrite(ledCanonPin, LOW);

	delay(5000);
}

Cet exemple est valable pour un son, si tu dois multiplier les sons, il, faudra créer des fonctions

Cordialement
jpbbricole

1 Like

Excellent conseil @jpbbricole, et encore mieux de changer de bibliothèque car celle qu'il utilise manque de fonctions de base pour le bon fonctionnement du Dfplayer.

C'est un module très instable et "capricieux", surtout si vous utilisez un clone chinois avec la puce GD3200B de Diymore et non le YX5200-24SS officiel de DFrobot, qui est plus stable.

La première chose que nous devons faire après l'avoir initialisé et avant de lui donner une quelconque commande est :

  delay (500);
  myDFPlayer.reset();
  delay (1000);

Si 500 et 1000, celui qui lit ceci pour faire attention à moi évitera de nombreuses heures de frustration sur le protoboard.
Et le second et si nous allons utiliser le BUSY...

Insuffisant, en dessous de 500, c'est l'échec assuré, Croyez-moi, j'ai beaucoup essayé.Le signal BUSY a plus de rebonds qu'un bouton recyclé des années 40. Je recommande de toujours utiliser un délai de 500 après toute commande au Dfplayer.

Voyons si le PO répond rapidement avec le circuit qu'il utilise, car il y a aussi des considérations rarement vues dans les schémas qui se trouvent sur le net.
Salutations.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.