Go Down

Topic: Module son minimp3 lecture fichier (Read 200 times) previous topic - next topic

didier2010

Mar 29, 2019, 01:17 pm Last Edit: Mar 29, 2019, 02:49 pm by didier2010
bonjour
j'ai ecrit un petit programme qui ,en autre doit lire des fichiers MP3 .
actuellement ,j'avais fait un test avec1 seul fichier MP3 , tout fonctionne bien,

ce matin , j'ai voulu lire un 2 et 3 fichier MP3, et la tout ce complique, puisque la lecture du bon fichier ne se fait pas .

sur ma carte SD , j'ai cree le repertoir MP3 et mis mes quatres fichiers . libelé 0001-bouton1.mp3;0002-radar.mp3; 0003-rire.mp3 et enfin 0004-tombe.mp3

puis j'utilise la commande
myDFPlayer.play(3); pour lire ici le fichier 3  donc  0003-radar.mp3

au resultat il me lit le fichier 0001- bouton1.mp3  ?

j'ai repris pas à pas et voila le resultat

si je commande  myDFPlayer.play(1); j'ai le fichier 0004 en lecture
si je commande  myDFPlayer.play(2); j'ai le fichier 0002 en lecture
si je commande  myDFPlayer.play(3); j'ai le fichier 0001 en lecture
si je commande  myDFPlayer.play(4); j'ai le fichier 0003 en lecture


le programme ci-dessous
Code: [Select]



// declacaration des bibliotheques
#include <Adafruit_NeoPixel.h> // Charge la librairie Neo Pixel d'Adafruit utilisé pour piloter le ruban de LED
#include "Arduino.h"//son
#include "SoftwareSerial.h"// son
#include "DFRobotDFPlayerMini.h"//son

//declaration variables



#define WS2812pin 3 // n° pin des led w2812
#define WS2812nbled 7 // n° de led sur le bandeau ws2818
// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//systaxe strip.setPixelColor(ws2812numerodelaled, rouge, vert, bleu);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(WS2812nbled, WS2812pin, NEO_GRB + NEO_KHZ800);

DFRobotDFPlayerMini myDFPlayer;//son

SoftwareSerial mySoftwareSerial(A4, A5); // RX, TX  SON si sur autre port que A4(rx) et A5(tx) 1
int compteurson=0;// son variable pour eviter la repetion du son

int SW1=A0;
int etatsw1=0;

int SW2=A1;
int etatsw2=0;

int SW3=A2;
int etatsw3=0;

int SW4=A3;
int etatsw4=0;




void setup() //definition des pin

{

  mySoftwareSerial.begin(9600);//SON si sur autre port que 0(rx) et (tx) 1
 if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3. si sur autre port que 0(rx) et (tx) 1
 
 
 
 }
 
 
  myDFPlayer.volume(28);  //Set volume value. From 0 to 30 SON
  myDFPlayer.play(1);  //lit le 3 fichier mp3 SON  mettre un son comme boitier X activer
 
  pinMode(A0,INPUT);//SW1
  pinMode(A1,INPUT);//SW2
  pinMode(A2,INPUT);//SW3
  pinMode(A3,INPUT);//SW4
 
  pinMode(6,OUTPUT);//ES1
  pinMode(3,OUTPUT);//le ws2812
  strip.begin();//ws2812
  strip.show(); // intialise toutes les led du ws2812

 
 
 
 
 
 
 
  }



void loop() //programme principal tourne en boucle
 
 {
 
 
  etatsw1=digitalRead(SW1);// on regard letat du entrée 1
  delay(50);
  etatsw2=digitalRead(SW2);// on regarde letat du entree 2
  delay(50);
  etatsw3=digitalRead(SW3);// on regarde letat du entree 3
  delay(50);
  etatsw4=digitalRead(SW4);// on regarde letat du entre 4
  delay(50);
 
 
  // *********on allume ce que lon veut superviser enfonction del'etat************.
   // on part sur la base de  supervise toutes les entrees et sorties
  //**********entrée  ou sortie utilise= led allume en vert si condition ok en rouge si condition no***********
  //***********entree ou sortie non utilisé =led eteinte**************************
// on part sur led1 = entree1, led2=entree2, led3=entrée3,.....
// reste à savoir comment on les dispose et on les connecte sur la   boite ???
// sinon on supervise que les sortie surc la meme base !
 
 // ******************on verifie et affiche l'etat des entreées qui sont necessaire *****************************
  if (etatsw1==HIGH)
  {strip.setPixelColor(1, 0, 255, 0);//ws2812 on allume la led n°1 en vert
  strip.show();//ws2812 on affiche
  }
  else
  {
  strip.setPixelColor(1, 255, 0, 0);//ws2812 on allume la led n°1 en rouge
  strip.show();//ws2812 on affiche
 
 
  }
 
   if (etatsw2==HIGH)
  {strip.setPixelColor(2, 0, 255, 0);//ws2812 on allume la led n°2 en vert
  strip.show();//ws2812 on affiche
  }
  else
  {
  strip.setPixelColor(2, 255, 0, 0);//ws2812 on allume la led n°2 en rouge
  strip.show();//ws2812 on affiche
  }
   
    if (etatsw3==LOW)
  {strip.setPixelColor(3, 0, 255, 0);//ws2812 on allume la led n°3 en vert
  strip.show();//ws2812 on affiche
  }
  else
  {
  strip.setPixelColor(3, 255, 0, 0);//ws2812 on allume la led n°3 en rouge
  strip.show();//ws2812 on affiche
  }
 
   if (etatsw4==HIGH)
  {strip.setPixelColor(4, 0, 255, 0);//ws2812 on allume la led n°3 en vert
  strip.show();//ws2812 on affiche
  }
  else
  {
  strip.setPixelColor(4, 255, 0, 0);//ws2812 on allume la led n°3 en rouge
  strip.show();//ws2812 on affiche
  }
 
 
 
 
  //============= imbrication des entrées à testées====================================
  if (etatsw1== HIGH && etatsw2== HIGH && etatsw3==LOW && etatsw4==HIGH )
  // ici on supervise la sortie repondant à la condition du IF
 
  {
   //********on supervise l'etat de la sortie 1********************
   //vert=  toute les conditions sont ok
   //rouge= une ou plusiers condition pas bonnes
     
    //  ws2812allume la led n° 5 en verte
   //systaxe strip.setPixelColor(ws2812numerodelaled, rouge, vert, bleu);
   strip.setPixelColor(5, 0, 255, 0);//ws2812 on allume la led n°1 en vert
   strip.show();//ws2812 on affiche
   
    // on joue un son 1 seul fois si les conditions sont reunies       
        //  if (compteurson==0)// afin de ne pas repeter le son en bcle
        // {
         //    myDFPlayer.play(1);  //lit le 1 fichier mp3 SON mettre son comme coffre ouvert
          //   delay(50);
          //  compteurson=compteurson+1;// on rajoute +1
          //}
         
         digitalWrite(6,HIGH);// ES1 est Haute +5V
  }
 
  else
  {
   // ws2812allume la led n° 5 en rouge
   //systaxe strip.setPixelColor(ws2812numerodelaled, rouge, vert, bleu);
   strip.setPixelColor(5, 255, 0, 0);//ws2812 on allume la led n°1 en rouge
   strip.show();//ws2812 on affiche
   
   compteurson = 0 ;//son blce mise à zero de la variable compteur son
   
   digitalWrite(6,LOW);//ES1 est BASSe à OV
 
 
 
  }
 
}






j'avoue que je ne comprends pas .




hbachetti

Le code se place entre balises "code" pas "Quote".
C'est trop chiant à lire ...

Tu peux corriger ?

https://forum.arduino.cc/index.php?topic=315372.0 voir CORRIGER UN POST EXISTANT

Tu auras plus de chances de réponse.

Autrement :

Personnellement j'utilise plutôt :

Voici le structure de ma SD :
 * FOLDER 01
 *    001-dog.mp3
 *    002-crocodile.mp3
 *    003-aligator.mp3
 *    004-gorilla.mp3
 * FOLDER 02
 *    001-cuckoo.mp3
 *    002-finch.mp3
 *    003-raven.mp3
 *    004-crow.mp3
 *    005-magpie.mp3

Comme tu peux le voir, les noms de répertoire sont sur 2 digits. Les nom de fichiers sont sur 3 digits, mais tu peux ajouter du texte derrière pour que ce soit plus parlant. Le DFPLAYER n'en tient pas compte.

Code: [Select]

    myDFPlayer.playFolder(2, 1); // pour entendre le chien


Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

didier2010

#2
Mar 29, 2019, 03:17 pm Last Edit: Mar 29, 2019, 03:18 pm by didier2010
bonjour
la correction esf faite,
je suis un peu troublé avec ces balises.

la librairie que j'utilise ne permet pas cette lecture directe ,j'ai du decomposé
mais le resultat est le meme.

voici les modifications j'ai fait.


Code: [Select]


 myDFPlayer.volume(28);  //Set volume value. From 0 to 30 SON
  myDFPlayer.playMp3Folder(1); 
  delay(50);
  myDFPlayer.play(2);




didier2010

bonjour
j'ai trouvé sur le fichier je mettais sur 4 digit et non 3 .
maintenant c'est ok
merci

hbachetti

Quote
la librairie que j'utilise ne permet pas cette lecture directe ,j'ai du decomposé
J'utilise la même pourtant.

OK. Cool.
@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

didier2010

bonsoir

A t'on un moyen d'attendre qu'un fichier en cours de lecture soit fini pour executer le suivant ?




hbachetti

Bien sûr.

https://github.com/DFRobot/DFRobotDFPlayerMini/blob/master/examples/GetStarted/GetStarted.ino

Tu dois lire ce que raconte le DFPLAYER et ensuite appeler myDFPlayer.readType()
Si la méthode retourne DFPlayerPlayFinished c'est fini.

J'utilise la librairie DFRobotDFPlayerMini
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Go Up