DFPlayerMini
- Войдите на сайт для отправки комментариев
Втр, 15/02/2022 - 14:52
Здравствуйте Ув. участники форума!
Подскажите библиотеку для DFPlayerMini.
Задача: нужно чтобы с папки мр3 музыка (0001.мр3...0255.мр3) воспроизводилась рандомно, а по окончанию работы воспроизводился файл "сеанс окончен".
Вопрос: как сделать это?, чтобы в процессе рандомного воспроизведения не воспроизвелся файл "Сеанс окончен".
СПАСИБО!!!
Для начала хотелось бы услышать Вашу версию насчет того, что такое "рандомное воспроизведение".
Потому как может оказаться, что:
1. Ваша задача невыполнима.
2. Результат Вас не устроит (например, возможно повторное воспроизведение того же самого трека).
чтобы воспроизводилось в случайном порядке, повторение песен не страшно, а воспроизведение файла во время сеанса, который должен прозвучать по команде в конце не хотелось бы!
Нормально так, только "сеанс начался" - фиииигак и сразу же - "сеанс окончен", все по домам )))
По-простому: берется массив на 254 элементов, туда записываются числа от 1 до 255. Потом по нему пускается цикл с рандомайзом, который переставляет элементы массива. Затем осуществляется последовательный проход и каждый элемент массива скармливается плееру в качестве номера трека. После окончания прохода воспроизводится трек "сеанс окончен".
Мысль очень хорошая, можете примерчик показать, я начинаю познавать тонкости ide, СПАСИБО!!!
Мысль очень хорошая, можете примерчик показать, я начинаю познавать тонкости ide, СПАСИБО!!!
А причём тут тонкости IDE? Тебе полный алгоритм дали - воплоти его в код. Если что-то не будет получаться - ВМЕСТЕ С КОДОМ (то есть предоставив его по всем правилам форума) спросишь ещё раз.
Мысль очень хорошая, можете примерчик показать, я начинаю познавать тонкости ide, СПАСИБО!!!
Все "примерчики" я прогоняю в железе. А это требует времени гораздо больше, чем написать "Мысль очень хорошая". Если нужен готовый и отлаженный скетч - обращайтесь в "Ищу исполнителя".
Спасибо!
Я подумал что мне тут могут посоветовать библиотеку с функционалом например таким, который помог бы мне решить мою проблему,
Играй всю папку условно "sd:/0001" по кругу, а если надо обратится к конкретному треку то играй папку "sd:/0002/0001.мр3"
Я использую "DFPlayerMini_Fast.h", у нее есть myMP3.play(24) - играй конкретный трек "0024", myMP3.randomAll() - играй папку mp3 случайно.
в ней нет обращения к конкретным папкам, чтобы можно было файлы раскидать и нет рандома например от1 до 20 или играй рандомно конкретную папку, да и вообще не понятно как влк play типа играй по порядку, она не понимает что песне конец и надо след, так работает только в рандоме, но рандом захватывает треки которые должны звучать по команде.
Не надо мне "примерчиков"))), посоветуйте библиотеку с похожим функционалом!
Такой библиотеки не встречал. Это частное решение, которое нет особого смысла "библиотезировать".
Насколько я помню - DFPlayer вообще на имена может не смотреть в некоторых командах. Играет по тому порядку, в котором файлы писались на флешку.
Неправильно вставленный код буду удалять. Правила почитай хотя бы счас, если за 5 лет не сподобился
Забыл )
#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; } }Есть мысль все сделать так: играй от 1 до 20 трека а 21,22,23 обращаться по команде, не понятно только как ардуино поймет что надо играй след трек. В примерах все реализовано через "delay"
Есть мысль все сделать так
Что вы фигней маетесь... вам же Садман написал, как сделать. Чем вас не устраивает его решение?
Если не ошибаюсь, у плеера можно запросить статус - играет он еще текущую песню или уже закончил. Запустили одну, как закончил - запускайте следующую... и так в цикле по всем.
меня поражает, сколько вопросов на форумах по этому плееру... вещь-то простейшая, вроде...
Насколько я помню - DFPlayer вообще на имена может не смотреть в некоторых командах. Играет по тому порядку, в котором файлы писались на флешку.
так и есть!!
долго искал причину, проводник виндовса своими потоками записывает пронумерованные по феншую файлы на флешку в хаотичном порядке, а потом разбирайся почему на имя 00001.mp3 проигрывается все что угодно только не нужный файл, и да стирание и перезапись не помогает, нужно форматирование, видимо FAT читает как то "специфично" .
ой не простая... поверь, а еще кол-во модификаций, короче совсем не простая.
это если нужен мало мальский функционал, "пропеть одну песенку" - тут, да, все просто.
я тут наткнулся на еще одно подобное чудо - DY-SV17F, вот жду пока придет.
проводник виндовса своими потоками записывает пронумерованные по феншую файлы на флешку в хаотичном порядке
известная фигня. У меня в машине СД-чейнджер тоже читает файлы с диска не по именам, а в том порядке, как они записывались на диск.
Борюсь так - сначала переименовываешь файлы в нужном порядке, потом открываю проводник, сортирую файлы по именам и копирую в чистую пустую папку. А вот уже из этой папки пишу на носитель. Файлы оказываются отсортированы строго в нужном порядке
FAT выделяет первую свободную запись каталога...поэтому файл с именем 1.ххх может быть где угодно
FAT выделяет первую свободную запись каталога...поэтому файл с именем 1.ххх может быть где угодно
очередное бессмысленное сообщение
ничего себе как тут все по делу)
Ришени нашел пока такое: на флешке папка 01 содержит треки, 02 команды,
вызываю так
а проигрываю так
все песни играют одна за другой но есть огромный минус они играют всегда с 1 и закончится допустим на 5,
а когда вкл ардуино опять начинают играть с 1 по куда успеет например по 5ю, а хочется чтобы продолжалось воспроизведение с остановившейся, пробывал играться с
"myDFPlayer.advertise" но не понял как оно раб, в "myDFPlayer.randomAll()" зацепляет треки из папки 02, подскажите как сделать рандом только папки 01 ПЛИЗ! бошка уже пухнет)))PS
для паузы но не срабатывает
у плейера есть пин накотором 0 если работает и 1 если висит. Подключаем его к пину 9. У меня есть фрагмент кода проигрывающий случайные песни (до 255 ) по их номеру записи, которую 1 записали та и первая. В loop() пишу
вызывают функцию проигрывания
void PlayMusic(byte NofSound) { delay(1); Serial.begin(9600); Serial.write( 0x7E); Serial.write( 0xFF); Serial.write( 0x06); Serial.write( 0x03); Serial.write( 0x00); Serial.write( 0x00); Serial.write( NofSound+1); Serial.write( 0xFE ); Serial.write( byte(0xF8-NofSound-1)); Serial.write( 0xEF); delay(12); Serial.end(); }Остается только счетчик поставить чтобы выйти из прокрутки.
Забыл )...
ты где спер этот код?
и зачем сюда его поместил?
Я записываю так: скидываю файлы в каталог на диске, фаром туды иду, сортирую по имени и фаром же копирую на пустую карту. Все ложится как следует, номера в именах соответствуют физическому положению файлов.
Ну я его не спер а взял из примера библиотеки, к чему этот вопрос не понимаю.
Да вы все верно сказали, busy если не ошибаюсь.
Этот код сходится с библиотекой? Или надо др ?