Dfplayer_mini_mp3

Тема в разделе "Arduino & Shields", создана пользователем Danik, 27 янв 2020.

  1. Danik

    Danik Нуб

    Здравствуйте, участники форума!
    У меня дисплей NEXTION, ARDUINO UNO и DFPlayerMini.

    Код (C++):

    int knopka = 7;           // Состояние проигрывателя
    int b = false;            // Логика проигрывателя
    #include <SoftwareSerial.h>
    #include <Nextion.h>
    #include <DFPlayer_Mini_Mp3.h>
    SoftwareSerial nextion(2, 3);// RX-2,  TX-3
    Nextion myNextion(nextion, 9600);
    void setup()
    {
    Serial.begin (9600);
    mp3_set_serial (Serial);  
    delay (100);

    pinMode     (7, INPUT); // Инициализация 7-го пина на вход
    myNextion.init();
     
    }
    void loop()
    {
    int kn = digitalRead(7);  // считываем состояние кнопки
    delay (20);
    if (b==1)
    {
    mp3_play ();
    if (kn==1)
    {mp3_next();
    }
    delay (200);                    // проигрываем следующий файл
    }
    /////////////////////////////////////////////////////////////КНОПКА START//////////////////////////////////////////////////////////////
    String message = myNextion.listen(); //check for message
    if(message == "100")
    {
    b=1;
    mp3_set_volume (20);       // ГРОМКОСТЬ
    }
    //////////////////////////////////////////////////////////////END//////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////КНОПКА STOP /////////////////////////////////////////////////////////////
    if(message == "300")
    {
    b=0;
    mp3_stop (); // остановить воспроизведение
    delay (100);
    }
     if(message != ""){
      Serial.println(message);
      }
      }


    С дисплея отправляю команды например print "100" на воспроизведение музыки в ARDUINO ловлю их и по условиям воспроизвожу музыку, как видно по скетчу я использую для перехода на след. трек bussy контакт от мр3 модуля и считываю его состояние на d7 (int kn = digitalRead(7); // считываем состояние кнопки)
    если 0 играю если 1 то след. трек. (вообще надо, чтобы нажав на плай проиграли все песни одна за другой)
    все работает отлично, только иногда трек играет подряд 2 раза или перескочит с 3 на 5й вообщем не стабильно все это.
    Пробовал другую библиотеку "DFRobotDFPlayerMini.h" но при подключении ее
    SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
    переставали приходить команды от дисплея а без него все играет хорошо даже bussy контакт не нужен просто myDFPlayer.randomAll(); //Random play all the mp3. и все играет
    ВОПРОС как заставить это работать на старой библиотеке или как совместить дисплей с этой библиотекой
    (DFRobotDFPlayerMini.h)

    Я прошу помощи делаю для себя, не коммерция.
    кто не хочет помочь прошу Вас не тратить мое и свое время!
    всем кто может и хочет помочь ЗАРАНЕЕ СПАСИБО!
     
  2. DetSimen

    DetSimen Guest

    3 раза перечитал, но у жертв ЕГЭ с изложением своих нехитрых обрывков мыслей - бааальшие проблемы.
     
  3. Danik

    Danik Нуб

    торопился не до препинаний)
    вы не поняли вопроса или так...
     
  4. DetSimen

    DetSimen Guest

    скорее, так. мимокрокодил.
     
  5. Danik

    Danik Нуб

    я так и подумал.
    зачеееем...
     
  6. parovoZZ

    parovoZZ Гуру

    куда? Неуважение к русскому языку теперь так называется?

    я так понял, что что-то с чем-то не сходится.

    я хочу помочь!
     
  7. alp69

    alp69 Форумчанин

    1. Зачем объявляете переменную "knopka" и присваиваете ей значение, если далее пользуетесь только значением, а переменную вообще не используете?
    2. Значение, присваиваемое переменной "b", не соответствует заявленному типу данных. Заявлено целое число (int), присваивается булево значение (bool), а дальше по листингу это булево значение сравнивается с числом. И присваивается число. Так что, очень сомневаюсь, что условие if (b==1) будет выполнено пока "b" равно "false". А следовательно все, что лежит внутри этого "if", будет проигнорировано до присвоения "b" значения "1".
    Замените "false" на 0:
    Код (C++):
    int b = 0;            // Логика проигрывателя
     
    Последнее редактирование: 27 янв 2020
  8. Danik

    Danik Нуб

    СПАСИБО! все исправил, согласно замечаниям, буду пробовать.
    Забыл совсем) я песни проигрываю через флешку
    зацепил к пинам mp3 модуля гнездо usb, чтобы проигрывать через флешку а не через microcd
    usb+
    usb-
    5+
    gnd
    все играет отлично только иногда звук на 1-2 сек. пропадает, случайно не вкурсе из-за чего
     
    Последнее редактирование: 27 янв 2020
  9. alp69

    alp69 Форумчанин

    Опыта работы с данными модулями не имею. Могу лишь предположить (не более), что возможна просадка по питанию. Флэшка возможно жручая. Но это далеко не факт. Есть закономерность в пропадании звука? И в чем оно (пропадание) заключается? Пауза? Пропадание громкости?

    P.S.
    Иностранцы зависнут от этой фразы...:D
     
    Последнее редактирование: 27 янв 2020
  10. b707

    b707 Гуру

    Danik. зачем у вас в самом конце выводится message в сериал?
    Код (C++):
    if(message != ""){
      Serial.println(message);
      }
     
  11. Danik

    Danik Нуб

    b707 Здравствуйте!
    я по примеру библиотеки некстион делал там было так.
    решил оставить, я так понимаю условие такое: если что то пришло, отправь это что то в порт?
     
  12. b707

    b707 Гуру

    все бы ничего, только у вас к этому же порту подключен МП3 плеер, так что выходит что вы постоянно сбрасываете ему непонятные для него команды, мож поэтому он и заикается...
     
  13. Danik

    Danik Нуб

    вот вот))
    я пытался разделить их один на аппаратный другой на программный, но увы((
    про юарт читал пытаюсь разобраться
    serial.begin
    serial1.begin
    я не понял этот кусок
    вообще
    Код (C++):
    SoftwareSerial nextion(2, 3);// RX-2,  TX-3
    Nextion myNextion(nextion, 9600);
    void setup()
    {
    Serial.begin (9600);
    mp3_set_serial (Serial);
    delay (100);
    в библиотеке к мр3 модулю от дфробот
    было так
    Код (C++):
    #include "SoftwareSerial.h"
    #include "DFRobotDFPlayerMini.h"

    SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
    DFRobotDFPlayerMini myDFPlayer;
    так вообще команды с дисплея не понимает ардуино
    скорость должна быть разная?
     
  14. b707

    b707 Гуру

    я тоже не вполне понял. что вы пытаетесь сказать. Могу только отметить несколько вещей - может станет яснее

    1. Если вы нашли пример и в нем встречается Serial1, Serial2 и тд - сразу откладывайте в сторону, это код для Мега или СТМ32, на Уно он работать не будет

    2. На Уно одновременно можно запустить только два Сериала (акробатику не учитываем) - один аппаратный на пинах 0 и 1, он же USB-UART. И второй программный SoftwareSerial - на любых цифровых пинах кроме 0 и 1. У вас же в коде вы сейчас делаете вид, что у вас три Сериала - один для Некстион, один для МП3, и еще один - вывод сообщений в порт. Поскольку от первых двух вы отказаться не можете - вывод в порт придется убрать. иначе он будет мешать одному из девайсов
     
    Daniil нравится это.
  15. NikitOS

    NikitOS Король шутов Администратор

    Я тоже тороплюсь, поэтому 5.5
     
  16. Danik

    Danik Нуб

    все верно!
    у меня два сериала - аппаратный (0 и 1) мр3 модуль на нем, программный (2 и 3) для некстиона
    Код (C++):
    SoftwareSerial nextion(2, 3);// RX-2,  TX-3
    вопрос можно программных сделать 2шт, вот так?
    Код (C++):
    SoftwareSerial nextion(2, 3);// RX-2,  TX-3
    SoftwareSerial mySerial(10, 11); // RX, TX
        Serial.begin (9600);
    Nextion myNextion(nextion, 9600);
        mySerial.begin (9600);
     
    просто так не работает(
    мне не надо 3 сериала 2х достаточно)
    просто в примере от библиотеки дфробот
    там программный сериал но библиотека хорошая лучше чем эта

    Код (C++):
    #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()
    {
      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 file counts in folder SD:/03
    }

    void loop()
    {
      static unsigned long timer = millis();

      if (millis() - timer > 3000) {
        timer = millis();
        myDFPlayer.next();  //Play next mp3 every 3 second.
      }

      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 DFPlayerUSBInserted:
          Serial.println("USB Inserted!");
          break;
        case DFPlayerUSBRemoved:
          Serial.println("USB Removed!");
          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;
      }

    }
     
    я в этом примере ни пойму почему скорость разная 115200 и 9600 сериал один же программный?
     
  17. b707

    b707 Гуру

    если коротко, то нельзя, работать не будет
    а вы уверены, что она с аппаратным не работает? - попробуйте
    С чего вдруг тут один сериал? Вот же их два:
    Код (C++):
    mySoftwareSerial.begin(9600);
    Serial.begin(115200);
    вы меня убиваете своими туп .... нелогичными вопросами...
     
  18. Danik

    Danik Нуб

    ну простите тупенького)
    посоветуйте мануал по этому вопросу
     
  19. alp69

    alp69 Форумчанин

  20. Daniil

    Daniil Гуру

    тут, тут и тут.
    В ардуино иде есть примеры их тоже нужно читать