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 !
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 ?
Le plus simple, est de "lire" le signal BUSY
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
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.