Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme ecran nextion et sd failed

    11 avril 2021 à 1:45:27

    Bonsoir mon projet actuel de faire une ihm  avec l'écran nextion j'ai fait une playlist audio envoie fichier audio avec df mini player (photo jointe) , l'écran interagit mais j'ai un problème avec le code .

    je voudrais récupérer l'information ici le nom de ma music qui soit   afficher sur mon écran comment je peux procéder a cela ? 
    /*
     * Play wave audio files with Arduino.
     * This is a free software with NO WARRANTY.
     * https://simple-circuit.com/
     */
     
    #include <SPI.h>     // include Arduino SPI library
    #include <SD.h>      // include Arduino SD library
    #include "TMRpcm.h"  // include TMRpcm library
     
    #define next     2
    #define _pause   3
     
    TMRpcm audio;
     
    File root;
     
    void setup(void) {
      Serial.begin(9600);
      pinMode(next,   INPUT_PULLUP);
      pinMode(_pause, INPUT_PULLUP);
     
      Serial.print("Initializing SD card...");
      if (!SD.begin()) {
        Serial.println("failed!");
        while(true);  // stay here.
      }
      Serial.println("OK!");
     
      audio.speakerPin = 9;  // set speaker output to pin 9
     
      root = SD.open("/");      // open SD card main root
      printDirectory(root, 0);  // print all files names and sizes
     
      audio.setVolume(4);    //   0 to 7. Set volume level
      audio.quality(2);      //  Set 1 for 2x oversampling Set 0 for normal
     
    }
     
    // main loop
    void loop() {
     
      if ( !audio.isPlaying() ) {
        // no audio file is playing
        File entry =  root.openNextFile();  // open next file
        if (! entry) {
          // no more files
          root.rewindDirectory();  // go to start of the folder
          return;
        }
     
        uint8_t nameSize = String(entry.name()).length();  // get file name size
        String str1 = String(entry.name()).substring( nameSize - 4 );  // save the last 4 characters (file extension)
     
        if ( str1.equalsIgnoreCase(".wav") ) {
          // the opened file has '.wav' extension
          audio.play( entry.name() );      // play the audio file
          Serial.print("Playing file: ");
          Serial.println( entry.name() );
        }
     
        else {
          // not '.wav' format file
          entry.close();
          return;
        }
     
    
     
      }
    }
     
    // a small function for buttons debounce
    bool debounce (int bt)
    {
      byte count = 0;
      for(byte i = 0; i < 5; i++)
      {
        if ( !digitalRead(bt) )
          count++;
        delay(10);
      }
     
      if(count > 2)  return 1;
      else           return 0;
    }
     
    void printDirectory(File dir, int numTabs) {
      while (true) {
     
        File entry =  dir.openNextFile();
        if (! entry) {
          // no more files
          break;
        }
        for (uint8_t i = 0; i < numTabs; i++) {
          Serial.print('\t');
        }
        Serial.print(entry.name());
        if (entry.isDirectory()) {
          Serial.println("/");
          printDirectory(entry, numTabs + 1);
        } else {
          // files have sizes, directories do not
          Serial.print("\t\t");
          Serial.println(entry.size(), DEC);
        }
        entry.close();
      }
    }
     
    // end of code.

    le code de la carte sd 




    le code du playlist  :

    #include <doxygen.h>
    #include <NexButton.h>
    #include <NexCheckbox.h>
    #include <NexConfig.h>
    #include <NexCrop.h>
    #include <NexDualStateButton.h>
    #include <NexGauge.h>
    #include <NexGpio.h>
    #include <NexHardware.h>
    #include <NexHotspot.h>
    #include <NexNumber.h>
    #include <NexObject.h>
    #include <NexPage.h>
    #include <NexPicture.h>
    #include <NexProgressBar.h>
    #include <NexRadio.h>
    #include <NexRtc.h>
    #include <NexScrolltext.h>
    #include <NexSlider.h>
    #include <NexText.h>
    #include <NexTimer.h>
    #include <Nextion.h>
    #include <NexTouch.h>
    #include <NexUpload.h>
    #include <NexVariable.h>
    #include <NexWaveform.h>
    
    /*
     * Rui Santos 
     * Complete Project Details https://randomnerdtutorials.com
     */
    
    #include "Nextion.h"
    
    #include "DHT.h"
    #define DHTPIN 4     // what digital pin we're connected to
    
    
    // Declare your Nextion objects - Example (page id = 0, component id = 1, component name = "b0") 
    NexText f0 = NexText(3, 1, "f0"); 
    NexButton f1 = NexText(3, 2, "f1");
    NexButton f2 = NexText(3, 3, "f2");
    NexSlider f3 = NexText(3, 4, "f3");
    NexText f4 = NexText(3, 5, "f4");
    NexText f5 = NexText(3, 6, "f5");
    NexText f6 = NexText(3, 12, "f6");
    NexText f7 = NexText(3, 13, "f7");
    NexButton b0 = NexButton(3, 8, "b0");
    NexButton b1 = NexButton(3,9, "b1");
    NexSlider h0 = NexSlider(3, 11, "h0");
    
    
    
    // Register a button object to the touch event list.  
    NexTouch *nex_listen_list[] = {
      &b0,
      &b1,
      &h0,
      NULL
    };
     
    /*
     * Button bOn component pop callback function. 
     * When the ON button is released, the LED turns on and the state text changes. 
     */
    void bOnPopCallback(void *ptr) {
      tState.setText("State: on");
      digitalWrite(led1, HIGH);
    }
    
    /*
     * Button bOff component pop callback function. 
     * When the OFF button is released, the LED turns off and the state text changes. 
     */
    void bOffPopCallback(void *ptr) {
      tState.setText("State: off");
      digitalWrite(led1, LOW);
    }
    
    /*
     * Slider h0 component pop callback function. 
     * When the slider is released, the LED brightness changes and the slider text changes. 
     */
    void h0PopCallback(void *ptr) {
      uint32_t number = 0;
      char temp[10] = {0};
      // change text with the current slider value
      h0.getValue(&number);
      utoa(number, temp, 10);
      tSlider.setText(temp);
      // change LED brightness
      analogWrite(led2, number); 
    }
    
    /*
     * Button bUpdate component pop callback function. 
     * When the UPDATE button is released, the temperature and humidity readings are updated. 
     */
    void bUpdatePopCallback(void *ptr) {
      // Reading temperature or humidity takes about 250 milliseconds!
      // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
      float h = dht.readHumidity();
      // Read temperature as Celsius (the default)
      float t = dht.readTemperature();
      // Read temperature as Fahrenheit (isFahrenheit = true)
      float f = dht.readTemperature(true);
    
      // Check if any reads failed and exit early (to try again).
      if (isnan(h) || isnan(t) || isnan(f)) {
        return;
      }
      // Update temperature in Celsius
      static char temperatureCTemp[6];
      dtostrf(t, 6, 2, temperatureCTemp);
      tTempC.setText(temperatureCTemp);
    
      // Update humidity percentage text and progress bar
      char hTemp[10] = {0}; 
      utoa(int(h), hTemp, 10);
      tHumidity.setText(hTemp);
      jHumidity.setValue(int(h));
    
      // Update temperature in Fahrenheit
      static char temperatureFTemp[6];
      dtostrf(f, 6, 2, temperatureFTemp);
      tTempF.setText(temperatureFTemp);
    }
    
    void setup(void) {    
     
      Serial.begin(9600);
        
      // You might need to change NexConfig.h file in your ITEADLIB_Arduino_Nextion folder
      // Set the baudrate which is for debug and communicate with Nextion screen
      nexInit();
    
      // Register the pop event callback function of the components
      b0.attachPop(bOnPopCallback, &b0);
      b1.attachPop(bOffPopCallback, &b1);
      h0.attachPop(h0PopCallback);
     
     
    }
    
    void loop(void) {   
      /*
       * When a pop or push event occured every time,
       * the corresponding component[right page id and component id] in touch event list will be asked.
       */
      nexLoop(nex_listen_list);
    }

    comment récupère le caractère de la music et afficher sur l'écran 

    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2021 à 11:15:51

      Sur un élément NexText, tu as la fonction setText qui permet de lui affecter un texte mais aussi la fonction getText qui permet de récupérer le texte qu'il contient.

      Il te faudra transmettre un buffer ainsi que la taille de ce buffer pour ne pas qu'il y ai d'overflow dans le cas où le texte serait plus grand que le buffer que tu aura définit.

      Dans le cas d'un nom de fichier, on peut supposer qu'un buffer de 32 octets serait suffisant.

      Ce qui donne :

      char buff[32];
      nxObj.getText(buff, sizeof(buff));
      
      Serial.print("nxObj.text=");
      Serial.print(buff);
      Serial.println();




      -
      Edité par lorrio 11 avril 2021 à 11:16:29

      • Partager sur Facebook
      • Partager sur Twitter
        12 avril 2021 à 9:23:47

        merci pour ta réponse mais je ne comprend pas le nxObj.text= ? CE POUR LE RECUPETRE dans info dans le tableaux d'une façon dynamique ? 

        le code actuellement est un station météo je voudrais le mettre a mon projet il mais une erreur arduino sur le :

        tState.setText("State: on"); 

        je dois le mettre en B0.setText =en cliquant sur B0 ou B1 il descend de piste piste audio ?

        • Partager sur Facebook
        • Partager sur Twitter
          12 avril 2021 à 9:32:05

          La fonction Serial.print sert à afficher quelque chose dans la console, c'était juste à titre d'information pour que tu puisses voir le nom dans la console arduino et ainsi vérifier que le getText fonctionne correctement.

          Tu n'es clairement pas obligé de garder ces 3 lignes de Serial, c'est juste du debug.

          Pour ce qui est de ton second problème, cela vient du faire que la variable tState n'est pas déclarée.

          Comme tous les éléments graphique, il te faut le déclarer en précisant son PID (numéro de page), son CID (numéro de composant) ainsi que son nom, exactement comme tu l'as fais pour les autres éléments aux lignes 40 à 50 de ton code.

          Bref, un truc du genre : NexText tState = NexText(3, 14, "tState");

          -
          Edité par lorrio 12 avril 2021 à 9:34:02

          • Partager sur Facebook
          • Partager sur Twitter
            12 avril 2021 à 23:29:00

            merci pour ta réponse j'ai reçu mon df mini player je voudrais récupérer le nom de l'audio  est le placer sur écran ici en l'occurrence sur les f0..jusque f7 mais je ne trouver pas de fonction récupère donnée sur ce module ?.

            est-ce pas myDFPlayer.read() : Renvoie le numero de l’index en cours si lecture.?

              je vois pas comment introduire dans mon code .

            ma deuxieme question ce en suivant le tuto en mettre trois buttons  j'ai pas de sons il a bien un bruit qui sont de l'haut parleur mais pas la music.

            pourtant  en essayer un autre code de la datasheet sans les bps j'avais bien le sont  .

            https://www.electronics-lab.com/project/mp3-player-using-arduino-dfplayer-mini/ 

            code de mon écran 

            #include <doxygen.h>
            #include <NexButton.h>
            #include <NexCheckbox.h>
            #include <NexConfig.h>
            #include <NexCrop.h>
            #include <NexDualStateButton.h>
            #include <NexGauge.h>
            #include <NexGpio.h>
            #include <NexHardware.h>
            #include <NexHotspot.h>
            #include <NexNumber.h>
            #include <NexObject.h>
            #include <NexPage.h>
            #include <NexPicture.h>
            #include <NexProgressBar.h>
            #include <NexRadio.h>
            #include <NexRtc.h>
            #include <NexScrolltext.h>
            #include <NexSlider.h>
            #include <NexText.h>
            #include <NexTimer.h>
            #include <Nextion.h>
            #include <NexTouch.h>
            #include <NexUpload.h>
            #include <NexVariable.h>
            #include <NexWaveform.h>
            
            /*
             * Rui Santos 
             * Complete Project Details https://randomnerdtutorials.com
             */
            
            #include "Nextion.h"
            
            
            
            // Declare your Nextion objects - Example (page id = 0, component id = 1, component name = "b0") 
            NexButton f0 = NexButton(3, 1, "f0"); 
            NexButton f1 = NexButton (3, 2, "f1");
            NexButton f2 = NexButton (3, 3, "f2");
            NexButton f3 = NexButton (3, 4, "f3");
            NexButton f4 = NexButton(3, 5, "f4");
            NexButton f5 = NexButton (3, 6, "f5");
            NexButton f6 = NexButton (3, 12, "f6");
            NexButton f7 = NexButton(3, 13, "f7");
            NexButton b0 = NexButton(3, 8, "b0");
            NexButton b1 = NexButton(3,9, "b1");
            NexSlider h0 = NexSlider(3, 11, "h0");
            
            
            
            // Register a button object to the touch event list.  
            NexTouch *nex_listen_list[] = {
              &b0,
              &b1,
              &h0,
              &f0,
              &f1,
              &f2,
              &f3,
              &f4,
              &f5,
              &f6,
              &f7,
              NULL
            };
             
            /*
             * Button bOn component pop callback function. 
             * When the ON button is released, the LED turns on and the state text changes. 
             */
            void bOPopCallback(void *ptr) {
              fo.setText("f0: on");
              //digitalWrite(led1, HIGH);
            }
            
            /*
             * Button bOff component pop callback function. 
             * When the OFF button is released, the LED turns off and the state text changes. 
             */
            void bOffPopCallback(void *ptr) {
              tState.setText("State: off");
             // digitalWrite(led1, LOW);
            }
            
            /*
             * Slider h0 component pop callback function. 
             * When the slider is released, the LED brightness changes and the slider text changes. 
             */
            void h0PopCallback(void *ptr) {
              uint32_t number = 0;
              char temp[10] = {0};
              // change text with the current slider value
              h0.getValue(&number);
              utoa(number, temp, 10);
              tSlider.setText(temp);
              // change LED brightness
              analogWrite(led2, number); 
            }
            
            /*
             * Button bUpdate component pop callback function. 
             * When the UPDATE button is released, the temperature and humidity readings are updated. 
             */
            /*void bUpdatePopCallback(void *ptr) {
              // Reading temperature or humidity takes about 250 milliseconds!
              // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
              float h = dht.readHumidity();
              // Read temperature as Celsius (the default)
              float t = dht.readTemperature();
              // Read temperature as Fahrenheit (isFahrenheit = true)
              float f = dht.readTemperature(true);
            
              // Check if any reads failed and exit early (to try again).
              if (isnan(h) || isnan(t) || isnan(f)) {
                return;
              }
              // Update temperature in Celsius
              static char temperatureCTemp[6];
              dtostrf(t, 6, 2, temperatureCTemp);
              tTempC.setText(temperatureCTemp);
            
              // Update humidity percentage text and progress bar
              char hTemp[10] = {0}; 
              utoa(int(h), hTemp, 10);
              tHumidity.setText(hTemp);
              jHumidity.setValue(int(h));
            
              // Update temperature in Fahrenheit
              static char temperatureFTemp[6];
              dtostrf(f, 6, 2, temperatureFTemp);
              tTempF.setText(temperatureFTemp);
            }
            */
            void setup(void) {    
             
              Serial.begin(9600);
                
              // You might need to change NexConfig.h file in your ITEADLIB_Arduino_Nextion folder
              // Set the baudrate which is for debug and communicate with Nextion screen
              nexInit();
            
              // Register the pop event callback function of the components
              b0.attachPop(bOnPopCallback, &b0);
              b1.attachPop(bOffPopCallback, &b1);
              h0.attachPop(h0PopCallback);
             
             
            }
            
            void loop(void) {   
              /*
               * When a pop or push event occured every time,
               * the corresponding component[right page id and component id] in touch event list will be asked.
               */
              nexLoop(nex_listen_list);
            }

            code de df player 

            ///              MP3 PLAYER PROJECT
            /// http://educ8s.tv/arduino-mp3-player/
            //////////////////////////////////////////
            
            
            #include "SoftwareSerial.h"
            SoftwareSerial mySerial(10, 11);
            # define Start_Byte 0x7E
            # define Version_Byte 0xFF
            # define Command_Length 0x06
            # define End_Byte 0xEF
            # define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]
            
            # define ACTIVATED LOW
            
            int buttonNext = 2;
            int buttonPause = 3;
            int buttonPrevious = 4;
            boolean isPlaying = false;
            
            
            
            void setup () {
            
            pinMode(buttonPause, INPUT);
            digitalWrite(buttonPause,HIGH);
            pinMode(buttonNext, INPUT);
            digitalWrite(buttonNext,HIGH);
            pinMode(buttonPrevious, INPUT);
            digitalWrite(buttonPrevious,HIGH);
            
            mySerial.begin (9600);
            delay(1000);
            playFirst();
            isPlaying = true;
            
            
            }
            
            
            
            void loop () { 
            
             if (digitalRead(buttonPause) == ACTIVATED)
              {
                if(isPlaying)
                {
                  pause();
                  isPlaying = false;
                }else
                {
                  isPlaying = true;
                  play();
                }
              }
            
            
             if (digitalRead(buttonNext) == ACTIVATED)
              {
                if(isPlaying)
                {
                  playNext();
                }
              }
            
               if (digitalRead(buttonPrevious) == ACTIVATED)
              {
                if(isPlaying)
                {
                  playPrevious();
                }
              }
            }
            
            void playFirst()
            {
              execute_CMD(0x3F, 0, 0);
              delay(500);
              setVolume(20);
              delay(500);
              execute_CMD(0x11,0,1); 
              delay(500);
            }
            
            void pause()
            {
              execute_CMD(0x0E,0,0);
              delay(500);
            }
            
            void play()
            {
              execute_CMD(0x0D,0,1); 
              delay(500);
            }
            
            void playNext()
            {
              execute_CMD(0x01,0,1);
              delay(500);
            }
            
            void playPrevious()
            {
              execute_CMD(0x02,0,1);
              delay(500);
            }
            
            void setVolume(int volume)
            {
              execute_CMD(0x06, 0, volume); // Set the volume (0x00~0x30)
              delay(2000);
            }
            
            void execute_CMD(byte CMD, byte Par1, byte Par2)
            // Excecute the command and parameters
            {
            // Calculate the checksum (2 bytes)
            word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
            // Build the command line
            byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,
            Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};
            //Send the command line to the module
            for (byte k=0; k<10; k++)
            {
            mySerial.write( Command_line[k]);
            }
            }

            merci tous tes conseils ;)


            • Partager sur Facebook
            • Partager sur Twitter
              13 avril 2021 à 13:54:25

              Il y a la commande readCurrentFileNumber qui permet d'obtenir le numéro de fichier en cours de lecture.

              Si tu veux formater ce nombre avec 4 digits avant de l'afficher, tu peux utiliser sprintf.

              Exemple:

              int fileNb = myDFPlayer.readCurrentFileNumber();
              
              char text[32];
              sprintf(text, "Fichier: %04d.mp3", fileNb);
              
              f0.setText(text);
              
              
              
              



              -
              Edité par lorrio 13 avril 2021 à 13:54:45

              • Partager sur Facebook
              • Partager sur Twitter
                13 avril 2021 à 16:00:09

                #include <doxygen.h>
                #include <NexButton.h>
                #include <NexCheckbox.h>
                #include <NexConfig.h>
                #include <NexCrop.h>
                #include <NexDualStateButton.h>
                #include <NexGauge.h>
                #include <NexGpio.h>
                #include <NexHardware.h>
                #include <NexHotspot.h>
                #include <NexNumber.h>
                #include <NexObject.h>
                #include <NexPage.h>
                #include <NexPicture.h>
                #include <NexProgressBar.h>
                #include <NexRadio.h>
                #include <NexRtc.h>
                #include <NexScrolltext.h>
                #include <NexSlider.h>
                #include <NexText.h>
                #include <NexTimer.h>
                #include <Nextion.h>
                #include <NexTouch.h>
                #include <NexUpload.h>
                #include <NexVariable.h>
                #include <NexWaveform.h>
                #include "Nextion.h"
                #include <stdlib.h>
                #include <unistd.h>
                
                // Declare your Nextion objects - Example (page id = 0, component id = 1, component name = "b0") 
                NexButton b2 = NexButton(3, 1, "b2"); 
                NexButton b3 = NexButton(3, 2, "b3");
                NexButton b4 = NexButton(3, 3, "b4");
                NexButton b5 = NexButton(3, 4, "b5");
                NexButton b6 = NexButton(3, 5, "b6");
                NexButton b0 = NexButton(3, 8, "b0");
                NexButton b1 = NexButton(3,9, "b1");
                NexSlider h0 = NexSlider(3, 11, "h0");
                
                // Register a button object to the touch event list.  
                NexTouch *nex_listen_list[] = {
                  &b0,
                  &b1,
                  &h0,
                  &b2,
                  &b3,
                  &b4,
                  &b5,
                  &b6,
                  NULL
                };
                
                /*
                 * Button bOn component pop callback function. 
                 * When the ON button is released, the LED turns on and the state text changes. 
                 */
                
                static char result[6];
                
                #include "Arduino.h"
                #include "SoftwareSerial.h"
                #include "DFRobotDFPlayerMini.h"
                
                SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
                DFRobotDFPlayerMini myDFPlayer;
                void printDetail(uint8_t type, int value);
                
                void setup()
                {
                    
                  // You might need to change NexConfig.h file in your ITEADLIB_Arduino_Nextion folder
                  // Set the baudrate which is for debug and communicate with Nextion screen
                  nexInit();
                /*
                  // Register the pop event callback function of the components
                  b0.attachPop(bOnPopCallback, &b0);
                  b1.attachPop(bOffPopCallback, &b1);
                  h0.attachPop(h0PopCallback);
                 
                 */
                  
                  mySoftwareSerial.begin(9600);
                  Serial.begin(115200);
                
                  Serial.println();
                  Serial.println(F("DFRobot DFPlayer Mini Demo"));
                  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
                
                  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
                    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
                
                  //----Set volume----
                  myDFPlayer.volume(10);  //Set volume value (0~30).
                  myDFPlayer.volumeUp(); //Volume Up
                  myDFPlayer.volumeDown(); //Volume Down
                
                  //----Set different EQ----
                  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
                //  myDFPlayer.EQ(DFPLAYER_EQ_POP);
                //  myDFPlayer.EQ(DFPLAYER_EQ_ROCK);
                //  myDFPlayer.EQ(DFPLAYER_EQ_JAZZ);
                //  myDFPlayer.EQ(DFPLAYER_EQ_CLASSIC);
                //  myDFPlayer.EQ(DFPLAYER_EQ_BASS);
                
                  //----Set device we use SD as default----
                //  myDFPlayer.outputDevice(DFPLAYER_DEVICE_U_DISK);
                  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
                //  myDFPlayer.outputDevice(DFPLAYER_DEVICE_AUX);
                //  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SLEEP);
                //  myDFPlayer.outputDevice(DFPLAYER_DEVICE_FLASH);
                
                  //----Mp3 control----
                //  myDFPlayer.sleep();     //sleep
                //  myDFPlayer.reset();     //Reset the module
                //  myDFPlayer.enableDAC();  //Enable On-chip DAC
                //  myDFPlayer.disableDAC();  //Disable On-chip DAC
                //  myDFPlayer.outputSetting(true, 15); //output setting, enable the output and set the gain to 15
                
                  //----Mp3 play----
                  myDFPlayer.next();  //Play next mp3
                  delay(1000);
                  myDFPlayer.previous();  //Play previous mp3
                  delay(1000);
                  myDFPlayer.play(1);  //Play the first mp3
                  delay(1000);
                  myDFPlayer.loop(1);  //Loop the first mp3
                  delay(1000);
                  myDFPlayer.pause();  //pause the mp3
                  delay(1000);
                  myDFPlayer.start();  //start the mp3 from the pause
                  delay(1000);
                  myDFPlayer.playFolder(15, 4);  //play specific mp3 in SD:/15/004.mp3; Folder Name(1~99); File Name(1~255)
                  delay(1000);
                  myDFPlayer.enableLoopAll(); //loop all mp3 files.
                  delay(1000);
                  myDFPlayer.disableLoopAll(); //stop loop all mp3 files.
                  delay(1000);
                  myDFPlayer.playMp3Folder(4); //play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535)
                  delay(1000);
                  myDFPlayer.advertise(3); //advertise specific mp3 in SD:/ADVERT/0003.mp3; File Name(0~65535)
                  delay(1000);
                  myDFPlayer.stopAdvertise(); //stop advertise
                  delay(1000);
                  myDFPlayer.playLargeFolder(2, 999); //play specific mp3 in SD:/02/004.mp3; Folder Name(1~10); File Name(1~1000)
                  delay(1000);
                  myDFPlayer.loopFolder(5); //loop all mp3 files in folder SD:/05.
                  delay(1000);
                  myDFPlayer.randomAll(); //Random play all the mp3.
                  delay(1000);
                  myDFPlayer.enableLoop(); //enable loop.
                  delay(1000);
                  myDFPlayer.disableLoop(); //disable loop.
                  delay(1000);
                
                  //----Read imformation----
                  Serial.println(myDFPlayer.readState()); //read mp3 state
                  Serial.println(myDFPlayer.readVolume()); //read current volume
                  Serial.println(myDFPlayer.readEQ()); //read EQ setting
                  Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card
                  Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number
                  Serial.println(myDFPlayer.readFileCountsInFolder(3)); //read fill counts in folder SD:/03
                }
                
                void loop()
                {
                   nexLoop(nex_listen_list);
                   
                  static unsigned long timer = millis();
                
                  if (millis() - timer > 10000) {
                     Serial.println(myDFPlayer.readCurrentFileNumber());
                     const char teest = myDFPlayer.readCurrentFileNumber();
                     b2.setText(teest);
                    // dtostrf (result,4,2);
                    timer = millis();
                    myDFPlayer.next();  //Play next mp3 every 3 second.
                  }
                int fileNb = myDFPlayer.readCurrentFileNumber();
                 
                char text[32];
                sprintf(text, "Fichier: %04d.mp3", fileNb);
                 
                b2.setText(text);
                
                  if (myDFPlayer.available()) {
                    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
                  }
                }
                
                void printDetail(uint8_t type, int value){
                  switch (type) {
                    case TimeOut:
                      Serial.println(F("Time Out!"));
                      break;
                    case WrongStack:
                      Serial.println(F("Stack Wrong!"));
                      break;
                    case DFPlayerCardInserted:
                      Serial.println(F("Card Inserted!"));
                      break;
                    case DFPlayerCardRemoved:
                      Serial.println(F("Card Removed!"));
                      break;
                    case DFPlayerCardOnline:
                      Serial.println(F("Card Online!"));
                      break;
                    case DFPlayerPlayFinished:
                      Serial.print(F("Number:"));
                      Serial.print(value);
                      Serial.println(F(" Play Finished!"));
                      break;
                    case DFPlayerError:
                      Serial.print(F("DFPlayerError:"));
                      switch (value) {
                        case Busy:
                          Serial.println(F("Card not found"));
                          break;
                        case Sleeping:
                          Serial.println(F("Sleeping"));
                          break;
                        case SerialWrongStack:
                          Serial.println(F("Get Wrong Stack"));
                          break;
                        case CheckSumNotMatch:
                          Serial.println(F("Check Sum Not Match"));
                          break;
                        case FileIndexOut:
                          Serial.println(F("File Index Out of Bound"));
                          break;
                        case FileMismatch:
                          Serial.println(F("Cannot Find File"));
                          break;
                        case Advertise:
                          Serial.println(F("In Advertise"));
                          break;
                        default:
                          break;
                      }
                      break;
                    default:
                      break;
                  }
                 
                 
                 
                  
                }
                
                 void b2PopCallback(void *ptr) {
                  b2.setText(myDFPlayer.readCurrentFileNumber());
                 }

                j'ai ton code est collé j'ai rien afficher dessus 

                • Partager sur Facebook
                • Partager sur Twitter
                  13 avril 2021 à 17:53:54

                  Dans ta fonction ta fonction setup, tu envoies pleins de commande à ton DFPlayer avec un delay de 1000ms (une seconde) entre chaque, donc cela va prendre du temps.

                  Ton code ne rentrera dans le loop qui affiche le texte qu'après avoir finit le setup, soit une bonne vingtaine voir trentaine de seconde plus tard alors si tu n'as pas attendu aussi longtemps, cela pourrait expliquer pourquoi tu ne vois rien.

                  J'ai comme l'impression que tu as copié/collé le code de présentation sans vraiment chercher à comprendre ce qu'il fait... pose toi la question suivante : quel est l’intérêt des lignes 128 à 161 de ton code ?

                  Il y a aussi le fait que tu fais une boucle de bloquage du setup si le begin du DFPlayer échoue (ligne 94) donc dans le cas où le DFPlayer est mal cablé ou que la carte est mal détectée, ton programme ne s'exécute pas.

                  En revanche, il y a quand même un message d'erreur que tu affiche avec Serial.print, d'où ma question : que vois tu s'afficher sur la console de l'IDE Arduino ? (attention à bien la configurer à 115200bauds car c'est cette vitesse que tu utilises dans le Serial.begin).

                  Et puis question bonus : quelle carte Arduino utilises tu ? Arduino UNO ? Arduino DUE ? Autre ?

                  -
                  Edité par lorrio 13 avril 2021 à 17:54:22

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 avril 2021 à 10:25:20

                    bonjour merci de ta réponse j'utilise un arduino uno  j'ai en parenthésé les lignes 128 a 161  mais la ligne 94  pour initialiser la carte ?

                    voila ce que j'ai sur port série d'Arduino avec votre code :

                    DFRobot DFPlayer Mini Demo

                    Initializing DFPlayer ... (May take 3~5 seconds)

                    DFPlayer Mini online.

                    -1

                    29

                    0

                    2

                    1

                    -1

                    b2.txt="Fichier: -001.mp3"⸮⸮⸮b2.txt="Fichier: 0001.mp3"⸮⸮⸮b2.txt="Fichier: 0001.mp3"⸮⸮⸮b2.txt="Fichier: 0001.mp3"

                    mais ce texte fichier 001.mp3 je voudrais l'afficher sur l'écran mais la ca ne fonction pas , je précise que j'ai mis des boutons 

                    -
                    Edité par doub01 14 avril 2021 à 10:37:13

                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 avril 2021 à 19:13:51

                      La ligne 94 de ton programme n'est pas exécuté car sinon, tu aurais vu apparaitre le message "Unable to begin" dans la console.

                      Du coup, avec ce qu'il s'affiche, c'est plutôt bon signe, il semblerait que ton DFPlayer marche puisque ton arduino arrive à communiquer avec lui.

                      Reste maintenant à comprendre ce qu'il se passe avec l'écran.

                      Avant toute chose, avant de parler du DFPlayer et des autres composants de te projet, as-tu essayé de faire marcher l'écran seul ?

                      Par exemple, as-tu essayé un code ultra simple qui ne fait qu'afficher HELLO sur un élément de l'écran, sans rien faire d'autre ?

                      Quelque chose dans ce style :

                      NexButton f0 = NexButton(3, 1, "f0"); 
                      NexButton b0 = NexButton(3, 8, "b0");
                      
                      NexTouch *nex_listen_list[] = {
                      	&b0,
                      	NULL
                      };
                      
                      void setup ( void ) {
                      	nexInit();
                      	f0.setText("HELLO");
                      }
                      
                      void loop(void) {
                      	nexLoop(nex_listen_list);
                      }

                      Vois tu le HELLO s'afficher à l'écran avec ce code ?

                      Ensuite, plusieurs autres questions me viennent à l'esprit :

                      - comment as tu raccordé l'écran à l'arduino ?

                      - quel Serial utilises tu pour la communication entre l'écran et l'arduino ?

                      - as tu modifié le fichier NexConfig.h de la lib ? et si oui, qu'as tu modifié ?

                      -
                      Edité par lorrio 14 avril 2021 à 19:15:18

                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 avril 2021 à 12:44:15

                        bonjour oui j'ai réussi a afficher sur b2 de mon écran  fichier 1 puis 2  (le nombre max sd mp3 dans mon sd est 2 )  

                        j'ai raccordé mon écran rx/tx et j'utilise en 9600 SoftwareSerial mySoftwareSerial , oui je les modifier le fichier nexconfig.h vu sur un tuto 

                        la le problème qui ce pose en faisant mes pages  il me reconnais pas mais indicationn Text:

                         voici le code que j'ai ajouter pour que ce soit visible sur mes boutons 

                             int current= myDFPlayer.readCurrentFileNumber();

                          char hTemp [10] = {0};

                          utoa  (current, hTemp, 10);

                          b2.setText (hTemp);

                           b2.setText (hTemp);

                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 avril 2021 à 15:16:02

                          Tu devrais prendre le temps de lire l'erreur, que te donne le compilateur, elle est très claire et te donne même la solution.

                          Error: 'NextText' does not name a type; did you mean 'NexText' ?

                          Chose que l'on pourrait traduire en :

                          Erreur: le type de variable 'NextText' n'existe pas... n'aurais tu pas voulu dire 'NexText' ?

                          Bref, tu as un 't' en trop dans ta ligne de code.

                          -
                          Edité par lorrio 15 avril 2021 à 15:16:33

                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 avril 2021 à 12:01:08

                            bonjour merci je me suis précipiter j'ai un erreur lorsque j'appui sur mon boutton play  je voudrais jouer la 1er music . myDFPlayer.play(1); , il mais une erreur START:
                            DFPlayerError:Get Wrong Stack sur mon moniteur série 
                            voici image de mon écran puis le code :
                            #include <doxygen.h>
                            #include <NexButton.h>
                            #include <NexCheckbox.h>
                            #include <NexConfig.h>
                            #include <NexCrop.h>
                            #include <NexDualStateButton.h>
                            #include <NexGauge.h>
                            #include <NexGpio.h>
                            #include <NexHardware.h>
                            #include <NexHotspot.h>
                            #include <NexNumber.h>
                            #include <NexObject.h>
                            #include <NexPage.h>
                            #include <NexPicture.h>
                            #include <NexProgressBar.h>
                            #include <NexRadio.h>
                            #include <NexRtc.h>
                            #include <NexScrolltext.h>
                            #include <NexSlider.h>
                            #include <NexText.h>
                            #include <NexTimer.h>
                            #include <Nextion.h>
                            #include <NexTouch.h>
                            #include <NexUpload.h>
                            #include <NexVariable.h>
                            #include <NexWaveform.h>
                            #include "Nextion.h"
                            #include <stdlib.h>
                            #include <unistd.h>
                            #include "NexPicture.h"
                            # define Start_Byte 0x7E
                            # define Version_Byte 0xFF
                            # define Command_Length 0x06
                            # define End_Byte 0xEF
                            # define Acknowledge 0x00
                            
                            
                            // Declare your Nextion objects - Example (page id = 0, component id = 1, component name = "b0") // liste page2= piste_audio 
                            NexButton b2 = NexButton(2, 9, "b2"); 
                            NexButton b3 = NexButton(2, 5, "b3");
                            NexButton b4 = NexButton(2, 6, "b4");
                            NexButton b5 = NexButton(2,7, "b5");
                            NexButton b6 = NexButton(2, 8, "b6");
                            NexButton b0 = NexButton(2, 2, "b0");
                            NexButton b1 = NexButton(2,3, "b1");
                            NexSlider h0 = NexSlider(2, 4, "h0");
                            
                            //page 1 =music 
                            NexPicture p0 = NexPicture (1,5,"p0");
                            NexPicture p1 = NexPicture (1,8,"p1");
                            NexPicture p2 = NexPicture (1,6,"p2");
                            NexPicture p3 = NexPicture (1,7,"p3");
                            NexButton back = NexButton(1, 9, "back"); 
                            NexText tpiste= NexText(1,1,"tpiste");
                            NexText t3 = NexText(1,2,"t3");
                            NexText t2 = NexText(1,3,"t2");
                            NexText tmax= NexText(1,4,"tmax");
                            
                            
                            //page0=accueil
                            NexText temp = NexText(0,3,"temp");
                            NexText t1 = NexText(0, 4, "t1");
                            NexButton music = NexButton(0, 2, "music");
                            NexButton next = NexButton(0, 5, "next");
                            
                            
                            
                            
                            // Register a button object to the touch event list.  // liste page 2 
                            NexTouch *nex_listen_list[] = {
                              &b0,
                              &b1,
                              &h0,
                              &b2,
                              &b3,
                              &b4,
                              &b5,
                              &b6,
                              &p1,
                              &p3,
                              NULL
                            };
                            
                            /*
                             * Button bOn component pop callback function. 
                             * When the ON button is released, the LED turns on and the state text changes. 
                             */
                            
                            static char result[6];
                            
                            #include "Arduino.h"
                            #include "SoftwareSerial.h"
                            #include "DFRobotDFPlayerMini.h"
                            
                            SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
                            DFRobotDFPlayerMini myDFPlayer;
                            void printDetail(uint8_t type, int value);
                            
                            
                            void setup()
                            {
                                
                              // You might need to change NexConfig.h file in your ITEADLIB_Arduino_Nextion folder
                              // Set the baudrate which is for debug and communicate with Nextion screen
                              nexInit();
                            
                              // Register the pop event callback function of the components
                            /*  b0.attachPop(bOnPopCallback, &b0);
                              b1.attachPop(bOffPopCallback, &b1);
                              h0.attachPop(h0PopCallback);*/
                              p1.attachPop(p1PopCallback,&p1);
                               p3.attachPop(p3PopCallback,&p3);
                             
                            
                              
                              mySoftwareSerial.begin(9600);
                              Serial.begin(9600);
                            
                              Serial.println();
                              Serial.println(F("DFRobot DFPlayer Mini Demo"));
                              Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
                            
                              if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
                                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
                            
                              //----Set volume----
                              myDFPlayer.volume(10);  //Set volume value (0~30).
                              myDFPlayer.volumeUp(); //Volume Up
                              myDFPlayer.volumeDown(); //Volume Down
                            
                            
                              //----Mp3 play----
                             /* myDFPlayer.next();  //Play next mp3
                              delay(1000);
                              myDFPlayer.previous();  //Play previous mp3
                              delay(1000);
                              myDFPlayer.play(1);  //Play the first mp3
                              delay(1000);
                              myDFPlayer.loop(1);  //Loop the first mp3
                              delay(1000);
                              myDFPlayer.pause();  //pause the mp3
                              delay(1000);
                              myDFPlayer.start();  //start the mp3 from the pause
                              delay(1000);
                              myDFPlayer.playFolder(15, 4);  //play specific mp3 in SD:/15/004.mp3; Folder Name(1~99); File Name(1~255)
                              delay(1000);
                              myDFPlayer.enableLoopAll(); //loop all mp3 files.
                              delay(1000);
                              myDFPlayer.disableLoopAll(); //stop loop all mp3 files.
                              delay(1000);
                              myDFPlayer.playMp3Folder(4); //play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535)
                              delay(1000);
                              myDFPlayer.advertise(3); //advertise specific mp3 in SD:/ADVERT/0003.mp3; File Name(0~65535)
                              delay(1000);
                              myDFPlayer.stopAdvertise(); //stop advertise
                              delay(1000);
                              myDFPlayer.playLargeFolder(2, 999); //play specific mp3 in SD:/02/004.mp3; Folder Name(1~10); File Name(1~1000)
                              delay(1000);
                              myDFPlayer.loopFolder(5); //loop all mp3 files in folder SD:/05.
                              delay(1000);
                              myDFPlayer.randomAll(); //Random play all the mp3.
                              delay(1000);
                              myDFPlayer.enableLoop(); //enable loop.
                              delay(1000);
                              myDFPlayer.disableLoop(); //disable loop.
                              delay(1000);
                            */
                              //----Read imformation----
                              /*
                              Serial.println(myDFPlayer.readState()); //read mp3 state
                              Serial.println(myDFPlayer.readVolume()); //read current volume
                              Serial.println(myDFPlayer.readEQ()); //read EQ setting
                              Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card
                              Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number
                              Serial.println(myDFPlayer.readFileCountsInFolder(3)); //read fill counts in folder SD:/03
                              */
                            }
                            void p1PopCallback(void *ptr) {
                            
                             myDFPlayer.play(1);
                             Serial.println("START");
                              }
                            void p3PopCallback(void *ptr) {
                               myDFPlayer.next();Serial.println("next");
                              
                            }
                             
                            
                            void loop()
                            {
                               nexLoop(nex_listen_list);
                               
                              static unsigned long timer = millis();
                            
                              if (millis() - timer > 2500) {
                                  int current= myDFPlayer.readCurrentFileNumber();
                              char hTemp [10] = {0};
                              utoa  (current, hTemp, 10);
                              t3.setText (hTemp);
                               t3.setText (hTemp);
                            
                                    int maxi = myDFPlayer.readFileCounts();
                              char htemp2 [10] = {0};
                              utoa  (maxi, htemp2, 10);
                              tmax.setText (htemp2);
                               tmax.setText (htemp2);
                            
                               
                               
                            
                                timer = millis();
                               // myDFPlayer.next();  //Play next mp3 every 3 second.
                                dtostrf(myDFPlayer.readCurrentFileNumber(),6,2,result);
                                Serial.println("---------------------------------------------------");
                            
                              }
                             /*
                            int fileNb = myDFPlayer.readCurrentFileNumber();
                             
                            char text[32];
                            sprintf(text, "Fichier: %04d.mp3", fileNb);
                             
                            t0.setText(text);
                            */
                            
                              if (myDFPlayer.available()) {
                                printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
                              }
                            }
                            
                            void printDetail(uint8_t type, int value){
                              switch (type) {
                                case TimeOut:
                                  Serial.println(F("Time Out!"));
                                  break;
                                case WrongStack:
                                  Serial.println(F("Stack Wrong!"));
                                  break;
                                case DFPlayerCardInserted:
                                  Serial.println(F("Card Inserted!"));
                                  break;
                                case DFPlayerCardRemoved:
                                  Serial.println(F("Card Removed!"));
                                  break;
                                case DFPlayerCardOnline:
                                  Serial.println(F("Card Online!"));
                                  break;
                                case DFPlayerPlayFinished:
                                  Serial.print(F("Number:"));
                                  Serial.print(value);
                                  Serial.println(F(" Play Finished!"));
                                  break;
                                case DFPlayerError:
                                  Serial.print(F("DFPlayerError:"));
                                  switch (value) {
                                    case Busy:
                                      Serial.println(F("Card not found"));
                                      break;
                                    case Sleeping:
                                      Serial.println(F("Sleeping"));
                                      break;
                                    case SerialWrongStack:
                                      Serial.println(F("Get Wrong Stack"));
                                      break;
                                    case CheckSumNotMatch:
                                      Serial.println(F("Check Sum Not Match"));
                                      break;
                                    case FileIndexOut:
                                      Serial.println(F("File Index Out of Bound"));
                                      break;
                                    case FileMismatch:
                                      Serial.println(F("Cannot Find File"));
                                      break;
                                    case Advertise:
                                      Serial.println(F("In Advertise"));
                                      break;
                                    default:
                                      break;
                                  }
                                  break;
                                default:
                                  break;
                              }
                             
                             
                             
                              
                             
                            }
                            voici le qui a sur ide : 
                            t3.txt="1"⸮⸮⸮t3.txt="1"⸮⸮⸮tmax.txt="7"⸮⸮⸮tmax.txt="7"⸮⸮⸮---------------------------------------------------
                            START
                            DFPlayerError:Get Wrong Stack
                            t3.txt="65535"⸮⸮⸮t3.txt="65535"⸮⸮⸮tmax.txt="1"⸮⸮⸮tmax.txt="1"⸮⸮⸮---------------------------------------------------
                            t3.txt="1"⸮⸮⸮t3.txt="1"⸮⸮⸮tmax.txt="7"⸮⸮⸮tmax.txt="7"⸮⸮⸮---------------------------------------------------
                            next
                            t3.txt="2"⸮⸮⸮t3.txt="2"⸮⸮⸮tmax.txt="7"⸮⸮⸮tmax.txt="7"⸮⸮⸮---------------------------------------------------
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 avril 2021 à 16:15:22

                              ? j'ai essayer pause ,start qui fonctionne mais le play,playfolder ne fonctionne pas sur module pourquoi ? j'ai regarder la doc je trouver pas ce message d'erreur ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                17 avril 2021 à 17:40:53

                                Là, cela va commencer à dépasser ce que je peux faire en terme d'aide car je n'ai jamais utilisé le DFPlayer.

                                Je me demande quand même si tu as correctement paramétré les fichiers de configuration de la lib.

                                En effet, il n'y a rien dans ton code qui demande à afficher des textes du genre "3.txt="1"⸮⸮⸮t3.txt="1"⸮⸮⸮tmax.txt="7"⸮⸮⸮tmax.txt="7"⸮⸮⸮" donc c'est assez suspect...

                                Le Serial de l'écran ne serait-il pas le bon ? (j'ai comme l'impression que la lib Nexion envoie des données sur le Serial Arduino connecté au PC plutôt que d'envoyer ces données à l'écran).

                                Ensuite, il faut savoir que la lib SoftwareSerial permet d'émuler une liaison série mais que ce n'est pas un vrai Serial hardware comme c'est le cas pour la classe Serial.

                                Il y a entre autre le fait que la classe SoftwareSerial utilise les interruptions de façon bloquante pendant l'émission et la réception, ce qui est problématique dans certains cas.

                                Par exemple, pendant qu'un SoftwareSerial reçoit des données, tous les autres SoftwareSerial deviennent temporairement inactif et ne peuvent ni recevoir, ni émettre de données.

                                Du coup, si le DFPlayer et l'écran envoies des données simultanément à l'arduino, il va forcément y avoir des octets de perdus, ce qui va créer des problèmes puisque les trames reçues seront incomplètes et donc potentiellement mal interprétées.

                                Tu ferais peut-être mieux d'envisager d'utiliser un Arduino DUE qui dispose de 4 ports Serial hardware et sur lequel tu n'auras donc pas besoin d'utiliser SoftwareSerial et les problèmes qui vont avec.

                                • Partager sur Facebook
                                • Partager sur Twitter

                                probleme ecran nextion et sd failed

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown