Mp3 se joue mais led ne clignote pas

Bonjour je débute, j'ai fait un code pour un arduino nano pour allumer des led et jouer un morceaux de musique c'est pour une Ecto-1 imprimer en 3d, mon problème c'est que même led clignotait comme il faut j'ai rajouter mon mp3 et quand le mp3 se lance certaine led devrais clignoter mais tout reste allumer merci.

`Texte préformaté`
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <DFRobotDFPlayerMini.h> 
#include <digitalPinFast.h>

SoftwareSerial mySerial(10, 11); // RX, TX

#define    TIMING        100
#define   PIN_FLASH_RED     5 //Feu rouge sur le toit avant
#define   PIN_FLASH_BLUE_1  10 //Feu bleu avant sur le toit 1
#define   PIN_FLASH_BLUE_2  A2 //Feu bleu avant sur le toit 2
#define   PIN_FLASH_BLUE_S  3 //Clignotant côté gauche, rétroviseur extérieur
#define   PIN_STROBE_1      2 //Clignotant avant 1
#define   PIN_STROBE_2      4 //Clignotant avant 2
#define   PIN_HEADLIGHTS    A1 //Phare
#define   PIN_TAILLIGHTS    A4 //Phare Jaune
#define   PIN_TAILLIGHTS_A4 A3 //Feu arrière
int     beacon[] = { 6, 7, 8, 9 }; //Balise sur le toit. 4 balises qui font 4 LED par broche.


void Starting_Sequence()
{
  
  digitalWrite(PIN_TAILLIGHTS, HIGH);
  delay(2000);
  digitalWrite(PIN_TAILLIGHTS_A4, HIGH);
  delay(2000);
    digitalWrite(PIN_HEADLIGHTS, HIGH);
  delay(2000);
    digitalWrite(PIN_FLASH_BLUE_1, HIGH);
    delay(2000);
    digitalWrite(PIN_FLASH_BLUE_2, HIGH);
    delay(2000);
  for (int i = 0; i < 6; i++)
  {
  digitalWrite(PIN_HEADLIGHTS, LOW);
    delay(20);
    digitalWrite(PIN_HEADLIGHTS, HIGH);
    delay(150);
        
  }
  digitalWrite(PIN_STROBE_1, HIGH);
  digitalWrite(PIN_STROBE_2, HIGH);
  delay(1000);
    digitalWrite(PIN_FLASH_BLUE_S, HIGH);
  delay(1000);
    digitalWrite(PIN_FLASH_BLUE_1, HIGH);
  delay(500);
  digitalWrite(PIN_FLASH_BLUE_2, HIGH);
  delay(1000);
  digitalWrite(PIN_FLASH_RED, HIGH);
  delay(1000);
  for (int i = 0; i < 4; i++)
  {
    digitalWrite(beacon[i], HIGH);
    delay(500);
  }
  delay(1500);
}
  
void set_lights(int a, int b, int c, int d, int strobe)
{
 // analogWrite(PIN_FLASH_WHITE, a);
  analogWrite(PIN_FLASH_BLUE_S, a);
  analogWrite(PIN_FLASH_RED, d);
  digitalWrite(strobe, digitalRead(strobe) == HIGH ? LOW : HIGH);
  delay(25);
}
void setup(){

  
  for (int i = 0; i < 4; i++)
  {
  pinMode(beacon[i], OUTPUT);
  }
  pinMode(PIN_FLASH_RED, OUTPUT);
  pinMode(PIN_FLASH_BLUE_1, OUTPUT);
  pinMode(PIN_FLASH_BLUE_2, OUTPUT);
  pinMode(PIN_FLASH_BLUE_S, OUTPUT);
  pinMode(PIN_STROBE_1, OUTPUT);
  pinMode(PIN_STROBE_2, OUTPUT);
  pinMode(PIN_HEADLIGHTS, OUTPUT);
  pinMode(PIN_TAILLIGHTS, OUTPUT);
  pinMode(PIN_TAILLIGHTS_A4, OUTPUT);
  Starting_Sequence();

  // son 
  
 
  mySerial.begin (9600);
  Serial.begin (9600);
  mp3_set_serial (mySerial);  //définir le logicielSerial pour le module mp3 DFPlayer-mini
  delay(10);  //wait 1ms for mp3 module to set volume
  mp3_set_volume (30); // valeur 0~30
  mp3_set_EQ(0);  //0~5Serial.begin (9600);
 randomSeed(analogRead(0)); // randomize le random
}


void loop()
{
 // ----------------- SOUND ---------------------
  mp3_play (1);
  delay (300000);
  
  digitalWrite(beacon[1], HIGH);
  set_lights(0, 250, 0, 0, PIN_STROBE_1);
  set_lights(60, 190, 60, 60, PIN_STROBE_1);
  set_lights(130, 130, 130, 130, PIN_STROBE_2);
  set_lights(190, 60, 190, 190, PIN_STROBE_2);
  set_lights(250, 10, 250, 250, PIN_STROBE_1);
  digitalWrite(beacon[1], LOW);
  for (int i = 2; i < 4; i++) {
    digitalWrite(beacon[i], HIGH);
    delay(TIMING);
    digitalWrite(beacon[i], LOW);}
  for (int i = 3; i >= 0; i--){
    digitalWrite(beacon[i], LOW);}
  digitalWrite(beacon[0], HIGH);
  set_lights(190, 60, 190, 190, PIN_STROBE_1);
  set_lights(130, 130, 130, 130, PIN_STROBE_2);
  set_lights(60, 190, 60, 60, PIN_STROBE_2);
  set_lights(0, 250, 0, 0, PIN_STROBE_1);
  digitalWrite(beacon[0], LOW);


}

Vous lancez un son et vous bloquez le code pendant 5 minutes …

(Delay() arrête toute l’exécution)

quand j’enlève le delay j'ai plus de sont qui sort du hp

Si ce n'est pas déjà fait, il faudrait câbler la broche BUSY du DFPlayerMini sur l'Arduino.
Supprimer le delay().
Ensuite, faire une boucle while () qui encapsule le clignotement. La condition de maintien dan leu while() étant la lecture en cours (soit BUSY == LOW).

Ainsi, cela lance le fichier mp3 et tant que le fichier est lu les LEDs clignotent. Et comme loop() est une boucle infinie ça recommence.

J'ai rajouter #define PIN_BUSY 13
en void setup j'ai mis pinMode(busy, INPUT); // busy
et en void loop while (readBusyPin() == LOW) es-que j'ai oublier autre chose merci

Tu définis PIN_BUSY et ensuite tu fais pinMode(busy, INPUT); il vaudrait mieux faire pinMode(PIN_BUSY, INPUT);

D'où sort ce readBusyPin()??
Il suffit de faire while(digitalRead(PIN_BUSY) == LOW)

voila ce que j'ai fait mais j'ai une erreur sur delay(1500);

#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <DFRobotDFPlayerMini.h> 
#include <digitalPinFast.h>

SoftwareSerial mySerial(10, 11); // RX, TX

#define    TIMING        100
#define   PIN_FLASH_RED     5 //Feu rouge sur le toit avant
#define   PIN_FLASH_BLUE_1  10 //Feu bleu avant sur le toit 1
#define   PIN_FLASH_BLUE_2  A2 //Feu bleu avant sur le toit 2
#define   PIN_FLASH_BLUE_S  3 //Clignotant côté gauche, rétroviseur extérieur
#define   PIN_STROBE_1      2 //Clignotant avant 1
#define   PIN_STROBE_2      4 //Clignotant avant 2
#define   PIN_HEADLIGHTS    A1 //Phare
#define   PIN_TAILLIGHTS    A4 //Phare Jaune
#define   PIN_TAILLIGHTS_A4 A3 //Feu arrière
#define PIN_BUSY 13
int     beacon[] = { 6, 7, 8, 9 }; //Balise sur le toit. 4 balises qui font 4 LED par broche.



    

  digitalWrite(PIN_TAILLIGHTS, HIGH);
  delay(2000);
  digitalWrite(PIN_TAILLIGHTS_A4, HIGH);
  delay(2000);
    digitalWrite(PIN_HEADLIGHTS, HIGH);
  delay(2000);
    digitalWrite(PIN_FLASH_BLUE_1, HIGH);
    delay(2000);
    digitalWrite(PIN_FLASH_BLUE_2, HIGH);
    delay(2000);
  for (int i = 0; i < 6; i++)
  {
  digitalWrite(PIN_HEADLIGHTS, LOW);
    delay(20);
    digitalWrite(PIN_HEADLIGHTS, HIGH);
    delay(150);
        
  }
  digitalWrite(PIN_STROBE_1, HIGH);
  digitalWrite(PIN_STROBE_2, HIGH);
  delay(1000);
    digitalWrite(PIN_FLASH_BLUE_S, HIGH);
  delay(1000);
    digitalWrite(PIN_FLASH_BLUE_1, HIGH);
  delay(500);
  digitalWrite(PIN_FLASH_BLUE_2, HIGH);
  delay(1000);
  digitalWrite(PIN_FLASH_RED, HIGH);
  delay(1000);
  for (int i = 0; i < 4; i++)
  {
    digitalWrite(beacon[i], HIGH);
    delay(500);
  }
  delay(1500);
}
  
void set_lights(int a, int b, int c, int d, int strobe)
{
 // analogWrite(PIN_FLASH_WHITE, a);
  analogWrite(PIN_FLASH_BLUE_S, a);
  analogWrite(PIN_FLASH_RED, d);
  digitalWrite(strobe, digitalRead(strobe) == HIGH ? LOW : HIGH);
  delay(25);
}
void setup(){
 
  
  for (int i = 0; i < 4; i++)
  {
  pinMode(beacon[i], OUTPUT);
  }
  pinMode(PIN_FLASH_RED, OUTPUT);
  pinMode(PIN_FLASH_BLUE_1, OUTPUT);
  pinMode(PIN_FLASH_BLUE_2, OUTPUT);
  pinMode(PIN_FLASH_BLUE_S, OUTPUT);
  pinMode(PIN_STROBE_1, OUTPUT);
  pinMode(PIN_STROBE_2, OUTPUT);
  pinMode(PIN_HEADLIGHTS, OUTPUT);
  pinMode(PIN_TAILLIGHTS, OUTPUT);
  pinMode(PIN_TAILLIGHTS_A4, OUTPUT);
  pinMode(PIN_BUSY, INPUT); // busy
//  Starting_Sequence();

  // son 
  
 
  mySerial.begin (9600);
  Serial.begin (9600);
  mp3_set_serial (mySerial);  //définir le logicielSerial pour le module mp3 DFPlayer-mini
  delay(10);  //wait 1ms for mp3 module to set volume
  mp3_set_volume (30); // valeur 0~30
  mp3_set_EQ(0);  //0~5Serial.begin (9600);
 randomSeed(analogRead(0)); // randomize le random
}


void loop()
{
 // ----------------- SOUND ---------------------
  mp3_play (1);
  //delay (300000);
  while(digitalRead(PIN_BUSY) == LOW)
 
      
  digitalWrite(beacon[1], HIGH);
  set_lights(0, 250, 0, 0, PIN_STROBE_1);
  set_lights(60, 190, 60, 60, PIN_STROBE_1);
  set_lights(130, 130, 130, 130, PIN_STROBE_2);
  set_lights(190, 60, 190, 190, PIN_STROBE_2);
  set_lights(250, 10, 250, 250, PIN_STROBE_1);
  digitalWrite(beacon[1], LOW);
  for (int i = 2; i < 4; i++) {
    digitalWrite(beacon[i], HIGH);
    delay(TIMING);
    digitalWrite(beacon[i], LOW);}
  for (int i = 3; i >= 0; i--){
    digitalWrite(beacon[i], LOW);}
  digitalWrite(beacon[0], HIGH);
  set_lights(190, 60, 190, 190, PIN_STROBE_1);
  set_lights(130, 130, 130, 130, PIN_STROBE_2);
  set_lights(60, 190, 60, 60, PIN_STROBE_2);
  set_lights(0, 250, 0, 0, PIN_STROBE_1);
  digitalWrite(beacon[0], LOW);
}

Merci d’éditer votre post en utilisant le :pencil2: dans la barre d’outil juste sous votre post et rajoutez les balises de de code (c’est difficilement lisible tel quel) :

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l’icône <code/> dans la barre d’outils pour indiquer que c’est du code

(Assurez vous aussi d’indenter le code correctement dans l’IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

il serait bon de (re)lire les recommandations listées dans « Les bonnes pratiques du Forum Francophone”

Et vérifie le code il manque un morceau après les define.

j'ai trouver mon erreur j'avais supprimer une ligne sans le vouloir , il y a du mieux mais les led clignote 2sec au lieu de le faire pendant toute la lecture du mp3.

Mets ton code.

#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <DFRobotDFPlayerMini.h>
#include <digitalPinFast.h>

SoftwareSerial mySerial(10, 11); // RX, TX

#define   TIMING        100
#define   PIN_FLASH_RED     5 //Feu rouge sur le toit avant
#define   PIN_FLASH_BLUE_1  10 //Feu bleu avant sur le toit 1
#define   PIN_FLASH_BLUE_2  A2 //Feu bleu avant sur le toit 2
#define   PIN_FLASH_BLUE_S  3 //Clignotant côté gauche, rétroviseur extérieur
#define   PIN_STROBE_1      2 //Clignotant avant 1
#define   PIN_STROBE_2      4 //Clignotant avant 2
#define   PIN_HEADLIGHTS    A1 //Phare
#define   PIN_TAILLIGHTS    A4 //Phare Jaune
#define   PIN_TAILLIGHTS_A4 A3 //Feu arrière
#define   PIN_BUSY 13
int     beacon[] = { 6, 7, 8, 9 }; //Balise sur le toit. 4 balises qui font 4 LED par broche.

void Starting_Sequence()
{

  digitalWrite(PIN_TAILLIGHTS, HIGH);
  delay(2000);
  digitalWrite(PIN_TAILLIGHTS_A4, HIGH);
  delay(2000);
  digitalWrite(PIN_HEADLIGHTS, HIGH);
  delay(2000);
  digitalWrite(PIN_FLASH_BLUE_1, HIGH);
  delay(2000);
  digitalWrite(PIN_FLASH_BLUE_2, HIGH);
  delay(2000);
  for (int i = 0; i < 6; i++)
  {
    digitalWrite(PIN_HEADLIGHTS, LOW);
    delay(20);
    digitalWrite(PIN_HEADLIGHTS, HIGH);
    delay(150);

  }
  digitalWrite(PIN_STROBE_1, HIGH);
  digitalWrite(PIN_STROBE_2, HIGH);
  delay(1000);
  digitalWrite(PIN_FLASH_BLUE_S, HIGH);
  delay(1000);
  digitalWrite(PIN_FLASH_BLUE_1, HIGH);
  delay(500);
  digitalWrite(PIN_FLASH_BLUE_2, HIGH);
  delay(1000);
  digitalWrite(PIN_FLASH_RED, HIGH);
  delay(1000);
  for (int i = 0; i < 4; i++)
  {
    digitalWrite(beacon[i], HIGH);
    delay(500);
  }
  delay(1500);
}

void set_lights(int a, int b, int c, int d, int strobe)
{
  // analogWrite(PIN_FLASH_WHITE, a);
  analogWrite(PIN_FLASH_BLUE_S, a);
  analogWrite(PIN_FLASH_RED, d);
  digitalWrite(strobe, digitalRead(strobe) == HIGH ? LOW : HIGH);
  delay(25);
}
void setup()
{
  for (int i = 0; i < 4; i++)
  {
    pinMode(beacon[i], OUTPUT);
  }
  pinMode(PIN_FLASH_RED, OUTPUT);
  pinMode(PIN_FLASH_BLUE_1, OUTPUT);
  pinMode(PIN_FLASH_BLUE_2, OUTPUT);
  pinMode(PIN_FLASH_BLUE_S, OUTPUT);
  pinMode(PIN_STROBE_1, OUTPUT);
  pinMode(PIN_STROBE_2, OUTPUT);
  pinMode(PIN_HEADLIGHTS, OUTPUT);
  pinMode(PIN_TAILLIGHTS, OUTPUT);
  pinMode(PIN_TAILLIGHTS_A4, OUTPUT);
  pinMode(PIN_BUSY, INPUT); // busy
  Starting_Sequence();

  // son
  mySerial.begin (9600);
  Serial.begin (9600);
  mp3_set_serial (mySerial);  //définir le logicielSerial pour le module mp3 DFPlayer-mini
  delay(10);  //wait 1ms for mp3 module to set volume
  mp3_set_volume (30); // valeur 0~30
  mp3_set_EQ(0);  //0~5Serial.begin (9600);
  randomSeed(analogRead(0)); // randomize le random
}


void loop()
{

  // ----------------- SOUND ---------------------
  mp3_play (1);
  //delay (300000);
  while (digitalRead(PIN_BUSY) == LOW)

    digitalWrite(beacon[1], HIGH);
  set_lights(0, 250, 0, 0, PIN_STROBE_1);
  set_lights(60, 190, 60, 60, PIN_STROBE_1);
  set_lights(130, 130, 130, 130, PIN_STROBE_2);
  set_lights(190, 60, 190, 190, PIN_STROBE_2);
  set_lights(250, 10, 250, 250, PIN_STROBE_1);
  digitalWrite(beacon[1], LOW);
  for (int i = 2; i < 4; i++) {
    digitalWrite(beacon[i], HIGH);
    delay(TIMING);
    digitalWrite(beacon[i], LOW);
  }
  for (int i = 3; i >= 0; i--) {
    digitalWrite(beacon[i], LOW);
  }
  digitalWrite(beacon[0], HIGH);
  set_lights(190, 60, 190, 190, PIN_STROBE_1);
  set_lights(130, 130, 130, 130, PIN_STROBE_2);
  set_lights(60, 190, 60, 60, PIN_STROBE_2);
  set_lights(0, 250, 0, 0, PIN_STROBE_1);
  digitalWrite(beacon[0], LOW);

}

Le code contrôlé par le while() doit être placé entre accolades.
Peut-être aussi placer un delay(100); juste avant le while() au cas où BUSY ne passerait pas à 0 dès l'envoi de mp3_play()

alors j'ai essayer ça j'ai pas de son mais les led clignote

void loop()
{

  // ----------------- SOUND ---------------------
  {
 
 while (digitalRead(PIN_BUSY) == LOW)
    
    mp3_play (1);
    delay (100);
     
      digitalWrite(beacon[1], HIGH);
    set_lights(0, 250, 0, 0, PIN_STROBE_1);
    set_lights(60, 190, 60, 60, PIN_STROBE_1);
    set_lights(130, 130, 130, 130, PIN_STROBE_2);
    set_lights(190, 60, 190, 190, PIN_STROBE_2);
    set_lights(250, 10, 250, 250, PIN_STROBE_1);
    digitalWrite(beacon[1], LOW);
    for (int i = 2; i < 4; i++) {
      digitalWrite(beacon[i], HIGH);
      delay(TIMING);
      digitalWrite(beacon[i], LOW);
    }
    for (int i = 3; i >= 0; i--) {
      digitalWrite(beacon[i], LOW);
    }
    digitalWrite(beacon[0], HIGH);
    set_lights(190, 60, 190, 190, PIN_STROBE_1);
    set_lights(130, 130, 130, 130, PIN_STROBE_2);
    set_lights(60, 190, 60, 60, PIN_STROBE_2);
    set_lights(0, 250, 0, 0, PIN_STROBE_1);
    digitalWrite(beacon[0], LOW);
  }


}

et après j'ai fait ça est c'est l’inverse mp3 lu mais led clignote pas


// ----------------- SOUND ---------------------
  {
    mp3_play (1);
    
    delay(100);
    while (digitalRead(PIN_BUSY) == LOW)
    
     digitalWrite(beacon[1], HIGH);
    set_lights(0, 250, 0, 0, PIN_STROBE_1);
    set_lights(60, 190, 60, 60, PIN_STROBE_1);
    set_lights(130, 130, 130, 130, PIN_STROBE_2);
    set_lights(190, 60, 190, 190, PIN_STROBE_2);
    set_lights(250, 10, 250, 250, PIN_STROBE_1);
    digitalWrite(beacon[1], LOW);
    for (int i = 2; i < 4; i++) {
      digitalWrite(beacon[i], HIGH);
      delay(TIMING);
      digitalWrite(beacon[i], LOW);
    }
    for (int i = 3; i >= 0; i--) {
      digitalWrite(beacon[i], LOW);
    }
    digitalWrite(beacon[0], HIGH);
    set_lights(190, 60, 190, 190, PIN_STROBE_1);
    set_lights(130, 130, 130, 130, PIN_STROBE_2);
    set_lights(60, 190, 60, 60, PIN_STROBE_2);
    set_lights(0, 250, 0, 0, PIN_STROBE_1);
    digitalWrite(beacon[0], LOW);
  }


}
void loop() {
    mp3_play (1);  // on lance la lecture
    
    delay(100);  // petite attente pour s'assurer que BUSY a basculé
    while (digitalRead(PIN_BUSY) == LOW){  // on boucle tant que dure la lecture

       // ici le code qui doit se répéter pendant la lecture!!!

   }
 }

Le while dit

Tant que le son est en train de jouer alors fais ….

➜ si vous n’avez pas lancé de son alors il n’est pas en train de jouer et vous n’entrez pas dans le while

➜ si vous avez lancé un son avant il rentre dans le while et là vous relancez le son. Si la boucle s’exécute assez vite vous n’entendrez rien car le son est relancé à chaque début de boucle while() plusieurs fois par seconde et donc le son n’a pas le temps de sortir

Il faut répéter

  • lancer le son
  • tant que le son joue
    • faire l’animation

Édit: comme le propose @fdufnews

merci ça fonctionne, penser vous que je peut lancer l'animation 20 sec après le début de la lecture du son merci

Le plus simple pour le savoir, c'est d'essayer.

Avec le code ci dessus à peine modifié

void loop() {
    mp3_play (1);  // on lance la lecture
    
    delay(20000);  // on attend 20 secondes

    while (digitalRead(PIN_BUSY) == LOW){  // tant que le son joue, on répète 
     // ici le code qui doit se répéter pendant la lecture
      . . . 
   }
 }

Je vous remercie mille fois pour votre aide tout fonctionne a merveille merci a vous.