Помогите разобраться с UART DFPlayer Mini 2.0

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

  1. stensilart

    stensilart Нуб

    так работает, т.к. ф-ия ЛУП постоянно гоняет в плеер ф-ию mp3_play(); поэтому косяк

    #include <SoftwareSerial.h>
    #include <DFPlayer_Mini_Mp3.h>
    int a=0;
    //
    void setup () {
    Serial.begin (9600);
    mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module
    mp3_set_volume (10);
    }

    //а питание я брал от другого источника питания (+5в)

    //
    void loop () {
    delay(2000);
    while (a<1){
    mp3_play(2);
    a++;
    }
    }
     
  2. NikNow

    NikNow Нуб

    Помогите пожалуйста.

    Сценарий такой:
    Push button нажал-отпустил.
    Заиграл случайный трек.
    Трек закончился, следующий не включается пока не нажмут кнопку снова.

    Код (C++):
    #include <SoftwareSerial.h>
    #include <DFPlayer_Mini_Mp3.h>

    boolean play_state = HIGH;  // module play state HIGH:NOT playing; LOW:playing
    int playStatePin = 3;       //digital pin3: read the module play state
    SoftwareSerial mySerial(8, 9); // RX, TX (Serial wiring; RX-TX, TX-RX)
    int flag=0;

    void setup () {
      pinMode(mySerial, OUTPUT);  
      Serial.begin (9600);
      mySerial.begin (9600);
      mp3_set_serial (mySerial);  //set softwareSerial for DFPlayer-mini mp3 module
      mp3_set_volume (10);        //value 0~30
      delay(1000);                //wait for the module setting finished
    }

    void loop()
    {      
         if(digitalRead(2)==HIGH&&flag==0)//если кнопка нажата  
         // и перемення flag равна 0 , то ...
         {
          delay(300);
                  mp3_random_play ();
            delay(3000);
            mp3_stop ();
            delay(300);
           flag = 1;
            //это нужно для того что бы с каждым нажатием кнопки
            //происходило только одно действие
            // плюс защита от "дребезга"  100%      
         }
         if(digitalRead(2)==LOW&&flag==1)//если кнопка НЕ нажата
         //и переменная flag равна - 1 ,то ...
         {
              delay(300);
              mp3_stop ();
            delay(300);
             digitalWrite(mySerial,!digitalRead(mySerial));
            flag = 0;//обнуляем переменную flag
         }
    }

     
     
    Последнее редактирование: 3 окт 2015
  3. NikNow

    NikNow Нуб

    все. Заработало. Не совсем так. но сойдет

    Код (C++):
    #include <SoftwareSerial.h>
    #include <DFPlayer_Mini_Mp3.h>


    int playStatePin = 3;       //digital pin3: read the module play state
    SoftwareSerial mySerial(8, 9); // RX, TX (Serial wiring; RX-TX, TX-RX)
    int flag=0;
    int n=0;

    void setup () {
      pinMode(mySerial, OUTPUT);  
      Serial.begin (9600);
      mySerial.begin (9600);
      mp3_set_serial (mySerial);  //set softwareSerial for DFPlayer-mini mp3 module
      mp3_set_volume (30);        //value 0~30
      delay(1000);   //wait for the module setting finished
           mp3_stop ();
    }

    void loop()
    {    
         if(digitalRead(14)==HIGH&&flag==0)
         {
          flag = 1;
         }
       
         if (digitalRead(14)==LOW&&flag==1)
         {
          delay(300);
          mp3_play (n++);
          delay(3000);
          mp3_stop ();
          delay(300);
          digitalWrite(mySerial,!digitalRead(mySerial));
          flag = 0;//обнуляем переменную flag
         }
    }
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    А зачем delay? У плеера же есть пин активности воспроизведения, пока трек звучит, кнопку игнорим.
    И вроде функция рандомного воспроизведения тоже есть.
     
  5. Kosss

    Kosss Нерд

    А можно вопрос до кучи? Можно ли подключить к RxTx пинам этой платы обычный USB кабель и заливать на флеху музыку с компа?
     
  6. geher

    geher Гуру

    Нельзя.
    Первое, на USB 5В, как минимум потребуется преобразование уровней, если хочется подключить напрямую (впрочем, безо всякой пользы), и при этом не спалить модуль.
    Второе, запись на флэшку протоколом просто не предусмотрена.
    Третье, протокол USB отличается от протокола последовательного порта. Потребуется преобразователь USB-TTL Serial, чтобы управлять проигрывателем через USB на ПК и последовательный порт на проигрывателе.
     
  7. Kosss

    Kosss Нерд

    [​IMG]
    Но тут же есть пины USB+ и USB- ?
    Я не хочу запускать музыку с компа. Я хочу добавлять музыку не вынимая флешки
     
    Последнее редактирование: 5 окт 2015
  8. Tomasina

    Tomasina Сушитель лампочек Модератор

    ну можешь попробовать :)
    На сайте Амперки написано, что "При подключении по USB модуль работает как SD-кардридер.". На других сайтах, где он упоминается (в том числе на официальном), такого текста нет.
     
  9. geher

    geher Гуру

    Вопрос был про пины RxTx.
    Работа с пинами USB +/- в официальных источниках не документирована. Тут ничего не скажу, пробовать надо.
     
  10. Tomasina

    Tomasina Сушитель лампочек Модератор

    вопрос был конкретно про пины USB+ и USB-, а Rx и Tx по протоколу и по вольтажу несовместимы.
     
  11. rockosov

    rockosov Нуб

    Кто-нибудь знает, можно ли получить от нее список файлов на SD-карте по UART? Чтобы можно было отображать проигрываемый трек на, допустим, LCD экране?
     
  12. DrProg

    DrProg Вечный нерд

    Врядли связь двухсторонняя. Даже наверняка нет.
     
    ИгорьК нравится это.
  13. Tomasina

    Tomasina Сушитель лампочек Модератор

    Нет. Чип на этой плате вообще не использует имена файлов, он оперирует их порядковым номером в файловой системе.
     
  14. rockosov

    rockosov Нуб

    А если подключиться по USB+/USB- и почитать содержимое карты? В принципе, я смогу ассоциировать порядковые номера и имена в скетче, главное, почитать содержимое...
     
  15. Tomasina

    Tomasina Сушитель лампочек Модератор

    Сомневаюсь, что Arduino потянет протокол USB, там тайминги жесткие.
    В порядке бреда: подключиться к флешке напрямую (параллельно), скетчи для чтения содержимого карты в сети есть.
     
  16. rockosov

    rockosov Нуб

    Действительно, в порядке бреда :)
    Спасибо за ответы!
     
  17. DrProg

    DrProg Вечный нерд

    Создать массив строк с именами файлов (исполнителей) и запускать параллельно, музыку на плеере, название на дисплее.
     
    ИгорьК нравится это.
  18. rockosov

    rockosov Нуб

    "
    Это да, я тут с Вами согласен. Но хотелось интерактивности. Чтобы жена (а делаю я проект для нее и ребенка) брала флешку, загружала на нее музыку и потом щелкала на песни, получая их названия на LCD.
     
  19. DrProg

    DrProg Вечный нерд

    Вообще, рекомендовано названия файлов начинать с 0000, 0001, 0002 и так далее, чтобы девайс понял к какому фалу он обращается под тем или иным номером, так что в любом случае имена будут искажены. Но это можно было бы исправить отсечением первых 3х символов, если бы от плеера была обратная связь. Судя по командам ее там нет, если не считать возврата данных о громкости, номере трека и статусе работы, которые хранятся и не на флешке, а в переменных:

    mp3_play (); //start play
    mp3_play (5); //play "mp3/0005.mp3"
    mp3_next (); //play next
    mp3_prev (); //play previous
    mp3_set_volume (uint16_t volume); //0~30
    mp3_set_EQ (); //0~5
    mp3_pause ();
    mp3_stop ();
    void mp3_get_state (); //send get state command
    void mp3_get_volume ();
    void mp3_get_u_sum ();
    void mp3_get_tf_sum ();
    void mp3_get_flash_sum ();
    void mp3_get_tf_current ();
    void mp3_get_u_current ();
    void mp3_get_flash_current ();
    void mp3_single_loop (boolean state); //set single loop
    void mp3_DAC (boolean state);
    void mp3_random_play ();
     
    ИгорьК нравится это.
  20. Onkel

    Onkel Гуру

    такой технический вопрос - у меня при проигрывании музыки заикается, примерно раз в 20-30 секунд затыкается на долю (ну может 0,2) секунды. Проверил на паре, на выходе динамика и на линии - заикается собака. не встречался такой баг? Может не успевает ?