DFPlayer команды

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

Здравствуйте!

Помогите, пожалуйста, новичку разобраться.
 

мне надо воспроизвести песни в случайном порядке одна за одной.

пробывал кучу библеотек там в них команда на воспроизведение такая есть но не работает или я не догоняю что к чему или подскажите пример busy pin ()

#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 fill 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 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;
  }
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Вон же там - randomAll() имеется.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

спасибо, что подсказали но он не работает 

sadman41
Offline
Зарегистрирован: 19.10.2016

"Random playback of the whole storage device. This command is used to randomly play sound files in the storage device according to physical sequence ..."

Должно работать.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

Должно но почемуто не работает(( можете представить рабочий скетч

sadman41
Offline
Зарегистрирован: 19.10.2016

Представить я что угодно могу - и рабочий и нерабочий.

Я проверил только что - всё играет. А что вы имеете ввиду под словом "не работает" я угадывать не хочу.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

sadman41 пишет:

Представить я что угодно могу - и рабочий и нерабочий.

Я проверил только что - всё играет. А что вы имеете ввиду под словом "не работает" я угадывать не хочу.

Уверяю Вас, я тоже проверил его то, что вы говорите "все играет" это действительно так - но он играет по 3 секунды каждую песню, а я хотел полное проигрывание, такой скетч мне сложно пока понять - поэтому я попросил пример сминимальным набором строк, спасибо

sadman41
Offline
Зарегистрирован: 19.10.2016

Предлагаю поступить наоборот - вы постите сюда пример, который у вас не работает, с минимальным набором строк. Мы смотрим и, может быть, советуем как быть далее. 

Тот экзампл, что в первом сообщении, физически не может играть по три секунды. Может у вас вообще более ничего нет, м?

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

sadman41 пишет:

 Может у вас вообще более ничего нет, м?

Вы абсолютно правы, у меня действительно больше нет примеров, потому и обратился за помощью.

Приведенный выше пример сложен для меня (я пока не такой понимающий в этом деле) и к сожалению мою задачу в полном объеме не выполняет(((.

Мне нужен скетч с минимальным набором строк, который играет рандомно песни целиком, СПАСИБО!!!

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Удалите или закоментируйте строки 104-107.

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

nurgazin_d@mail.ru пишет:

Приведенный выше пример сложен для меня (я пока не такой понимающий в этом деле) и к сожалению мою задачу в полном объеме не выполняет(((.

Мне нужен скетч с минимальным набором строк, который играет рандомно песни целиком, СПАСИБО!!!

У Вас два варианта:

1. Вы учитесь самостоятельно работать с Ардуиной. Возможно, для этого портебуется отложить на некоторое время упомянутый Вами проект и сначала собрать пару-тройку проектов попроще.

2. Заказать работу за деньги в разделе "Ищу исполнителя".

b707
Онлайн
Зарегистрирован: 26.05.2017

nurgazin_d@mai - не будьте так ленивы, прочитайте хотя бы комменты в том коде, который вы выложили...

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

b707 пишет:

nurgazin_d@mai - не будьте так ленивы, прочитайте хотя бы комменты в том коде, который вы выложили...

Какой смысл в этом высказывании??? Или вы думаете, что я вообще не в курсе как и че, я и дата шит, и библиотеки  перелопатил, везде примерчик типа этого:

#include <SoftwareSerial.h>

#include <DFPlayer_Mini_Mp3.h>
void setup () {
    Serial.begin (9600);
    mp3_set_serial (Serial);    
    mp3_set_volume (25);
    delay (100);
    mp3_play ();
    delay (100);
}
void loop () {        
    mp3_next (); // Следующий трек
    delay (10000); // пуза 10 секунд
}

 

или такой: 

#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
void setup () {
    Serial.begin (9600);
    mp3_set_serial (Serial);    //set Serial for DFPlayer-mini mp3 module 
  delay (100);
  mp3_set_volume (25);
  delay (100);
  mp3_play (); // запускаем трек 
  delay (100);
  mp3_random_play ();  // Даем команду проигрывать треки в случайной последовательности
}
void loop () {        
}

так что не говорите мне, что я ленюсь, это обидно слушать, когда ты почти год бьешься над этим проектом.

Я говорил, что у меня проблемы с этим модулем (судя по форуму даже у гуру программирования проблемы с этим модулем), о боги приведите сюда просвещенного, дабы он просветил меня.)))

Если вы такой умный решите на основании этих двух примеров выше поставленную задачу. СПАСИБО

 

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

ВСЕМ СПАСИБО!!! вроди сделал!!!

только теперь вопрос такой : почему после команды

  • mp3_pause (); // пауза
    mp3_stop (); // остановить воспроизведение
  • воспроизведение начинается с начала а не в случайном порядке т.е.
  • допустим он формирует список
  • 0003
  • 0009
  • 0015
  • но при каждом запуске воспроизводит его же
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
void setup () {
    Serial.begin (9600);
    mp3_set_serial (Serial);    //set Serial for DFPlayer-mini mp3 module 
  delay (100);
  mp3_set_volume (25);
  delay (100);
  mp3_play (); // запускаем трек 
  delay (100);
  mp3_random_play ();  // Даем команду проигрывать треки в случайной последовательности
}
void loop () {        
}

и последний вопрос как воспроизвести определенную песню из папки т.е.

команды\0001.мр3

  mp3_play (команды\1); // запускаем трек 

а песни\0001..0019

 mp3_random_play ();

только не работает так?

не знаю команду воспроизводи рандомно из этой папки и просто воспроизведи эту песню из этой папки

sadman41
Offline
Зарегистрирован: 19.10.2016

Random из папки плеер не умеет делать. И воспроизводить он будет не #1, #3, #4, #2 а вполне себе может отчудить #1, #3, #1, #2, #4.

Полноценный random из папки, как мне кажется, средствами самого плеера не получить.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

sadman41 пишет:

Random из папки плеер не умеет делать. И воспроизводить он будет не #1, #3, #4, #2 а вполне себе может отчудить #1, #3, #1, #2, #4.

Полноценный random из папки, как мне кажется, средствами самого плеера не получить.

Спасибо большое!!!

а как сделать так, чтобы например проиграл он допустим #1, #5, #19 и после нажатия на паузу продолжил играть дальше #2, #4, #68 и тд а то после команды mp3_pause (); или mp3_stop (); он опять начинает играть #1, #5, #19

b707
Онлайн
Зарегистрирован: 26.05.2017

nurgazin_d@mail.ru пишет:

b707 пишет:

nurgazin_d@mai - не будьте так ленивы, прочитайте хотя бы комменты в том коде, который вы выложили...

Какой смысл в этом высказывании??? Или вы думаете, что я вообще не в курсе как и че

 

Я ничего про вас не думаю - я всего лишь просил прочесть комменты в скетче. Если б вы это сделали - вы нашли бы три строчки, которые останавливают проигрывание песни после 3 секунд - и проблема была бы решена. Вместо этого вы предпочли ругаться и кидать в меня какими-то обрывками кодов.

 

b707
Онлайн
Зарегистрирован: 26.05.2017

nurgazin_d@mail.ru пишет:

а как сделать так, чтобы например проиграл он допустим #1, #5, #19 и после нажатия на паузу продолжил играть дальше #2, #4, #68 и тд а то после команды mp3_pause (); или mp3_stop (); он опять начинает играть #1, #5, #19

ну вы же все равно ардуиной управляете - так и случайное воспроизведение делайте не командами плеера, а ардуиной. Запросите список треков или хотя бы просто их число в каталоге - сформируйте случайный порядок номеров и заказывайте песни в этом порядке...

делов то...

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

делов то...

Не всё так просто и волшебно в этом плеере, конечно, но алгоритм, в целом такой. 

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

а почему он при команде плей играет только одну песню и не продолжает дальше, как быть??

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

b707 пишет:

ну вы же все равно ардуиной управляете - так и случайное воспроизведение делайте не командами плеера, а ардуиной. Запросите список треков или хотя бы просто их число в каталоге - сформируйте случайный порядок номеров и заказывайте песни в этом порядке...

делов то...

[/quote]

блин а как получить список, рандом радуино это где че (((( примерчик есть плииииз

sadman41
Offline
Зарегистрирован: 19.10.2016

Как быть... читать комментарии в коде: 

myDFPlayer.play(1);  //Play the first mp3

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

myDFPlayer.play(1);  //воспроизведение первого mp3, ну как бы я читал 

а как воспроизвести все песни??? 

я сейчас использую вот эту библиотеку #include <DFPlayer_Mini_Mp3.h>

b707
Онлайн
Зарегистрирован: 26.05.2017

nurgazin_d@mail.ru пишет:

 а как воспроизвести все песни???

ну блин, вы спите что ли? или бухаете?

вот, к примеру - песни с первой по двадцатую

for (byte i =1; i <21; i++) {
myDFPlayer.play(i);
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Там, под комментом 

//----Mp3 play----
 

Приведены команды библиотеки. Вам лень их поочередно перепробовать?

sadman41
Offline
Зарегистрирован: 19.10.2016

b707, включится только 20-й трэк. Исправь совет ;)

Hint: плеер работает асинхронно с МК и все команды на плей пролетят за 19*10мс.

b707
Онлайн
Зарегистрирован: 26.05.2017

а "примерчики" готовые - я считаю давать вредно. Вот только в эти выходные имели на форуме опыт - после 80 сообщений совершенного тупизма и глупости некий ленивый новичок все-таки выпросил кусок готового кода.

И что вы-таки думаете? - остался недоволен, что его так долго мурыжили, не дали код сразу. Вместо благодарности обложил форум и ушел.

 

b707
Онлайн
Зарегистрирован: 26.05.2017

sadman41 пишет:

Hint: плеер работает асинхронно с МК и все команды на плей пролетят за 19*10мс.

о, круто :) это я пальцем в небо попал :)

А он хотя бы выставляет какой-то флаг, что окончил играть очередную пьессу? :)

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

sadman, а у DFPlayera ноги Busy нету?  Чота мне такое помница... 

(смотреть неудобно, я с тапка) 

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

sadman41 пишет:

Hint: плеер работает асинхронно с МК и все команды на плей пролетят за 19*10мс.

о, круто :) это я пальцем в небо попал :)

А он хотя бы выставляет какой-то флаг, что окончил играть очередную пьессу? :)

Статус можно кверить или за бази пин щупать. Но с последним тоже весело.

sadman41
Offline
Зарегистрирован: 19.10.2016

DetSimen пишет:

sadman, а у DFPlayera ноги Busy нету?  Чота мне такое помница... 

(смотреть неудобно, я с тапка) 

Есть. Поэтому я цитировать сообщение не стал - вдруг b707 исправить захочет совет на правильный.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

Ребята вы молодци все спасибо буду пробывать за ногу busy

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

 а у DFPlayera ноги Busy нету? 

Есть, но там творится веселуха - не всегда срабатывает, насколько я заметил: было такое, что ещё играет, а BUSY сообщает, что свободен, типа. Кмк, лучше запрашивать статус. 

b707
Онлайн
Зарегистрирован: 26.05.2017

sadman41 пишет:

Есть. Поэтому я цитировать сообщение не стал - вдруг b707 исправить захочет совет на правильный.

не, второй раз выступать не буду. Похоже, этот плеер надо сначала в руках подержать.

глупость моя пусть останется - некрасиво это, затирать ошибки, когда их уже кто-то заметил и тебе указал. Архатом попахивает :)

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

DIYMan пишет:

DetSimen пишет:

 а у DFPlayera ноги Busy нету? 

Есть, но там творится веселуха - не всегда срабатывает, насколько я заметил: было такое, что ещё играет, а BUSY сообщает, что свободен, типа. Кмк, лучше запрашивать статус. 

А я где-то читал, што этот плэер ничо по сериалу не отдает, только принимает командные последовательности, или это было не про него?

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Не работал с ним, могу ашыбацца

sadman41
Offline
Зарегистрирован: 19.10.2016

DetSimen пишет:

А я где-то читал, што этот плэер ничо по сериалу не отдает, только принимает командные последовательности, или это было не про него?

Просишь в пакете байтиком - отдает, не просишь - не отдает. В последнем случае просто 10мс надо подождать между командами.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Ну я, начт, как всегда ашыбаюс. :-)

Я в запое, какабычно, юбилей вчерась встретил, простите меня за это. Я к пятнице абизательна протрезвею. :-)

sadman41
Offline
Зарегистрирован: 19.10.2016

Ты токо это... НовыйГод досрочно не встреть, а то опять от коллектива отобъешься.