Использую стандартную библиотеку DFRobotDFPlayerMini, на карте памяти у меня папка “mp3” и в ней 9 файлов, подписанных так: 0001 - 0009 .mp3. В папке “01” 2 файла Подписанных так:001-003.mp3, один запускается при старте, другой при каких нибудь ошибках. Проблема такая, не корректно считываются количество файлов и не правильно показывает номер воспроизведенного файла, поэтому пришлось сделать так:
Serial.print("Сейчас воспроизводится:");
Serial.println(in_data);
хотя по задумке считывается реально запущенный файл этим кодом:
Serial.println(myDFPlayer.readCurrentFileNumber());
Показывает в 01 папке 2 файла корректно, а в mp3 вчера показывало корректно, а сегодня лажа, хотя вчера количество показывало корректно… В чем может быть проблема? mp3 менял, все работает так же.
при запуске порта вводя цифру 2 к примеру, запускается второй файл, то есть с выводом mp3 файлов проблем нет, есть только в считывании файлов.
Весь код выкладываю:
#include "DFRobotDFPlayerMini.h"
// библиотека для эмуляции Serial порта
#include <SoftwareSerial.h>
// создаём объект mySoftwareSerial и передаём номера управляющих пинов RX и TX
// RX - цифровой вывод 10, необходимо соединить с выводом TX дисплея
// TX - цифровой вывод 11, необходимо соединить с выводом RX дисплея
SoftwareSerial mySoftwareSerial(8, 9); // RX, TX для плеера DFPlayer Mini
DFRobotDFPlayerMini myDFPlayer;
int launchMp3 = 1; // звук при старте
int ErMp3 = 1; // звук при ошибке
boolean isPlaying = false; // статус воспроизведения/пауза
void setup() {
mySoftwareSerial.begin(9600);
Serial.begin(9600);
delay(1000);
Serial.println();
Serial.println("Инициализация...");
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println("Не удается начать:");
Serial.println("1.Пожалуйста, еще раз проверьте подключение!");
Serial.println("2.Пожалуйста, вставьте SD-карту!");
while (true);
}
// myDFPlayer.setTimeOut(300);
//----Set volume----
myDFPlayer.volume(30); //Set volume value (0~30).
//----Set different EQ----
myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
if(launchMp3==1){myDFPlayer.playFolder(01,1);delay(3000);}
Serial.println(F("Инициализация прошла успешно!"));
delay(3000);
Serial.print("Количество аудио в папке MP3:");Serial.println(myDFPlayer.readFileCounts()-myDFPlayer.readFileCountsInFolder(1));
delay(1000);
Serial.print("Количество аудио в папке 01:");Serial.println(myDFPlayer.readFileCountsInFolder(1));
delay(1000);
}
void loop() {
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read());//Вывести подробное сообщение от DFPlayer для обработки различных ошибок и состояний. }
}
if(Serial.available()>0){//если есть доступные данные
int in_data = Serial.parseInt();
if(in_data > 0){
myDFPlayer.playMp3Folder(in_data);
Serial.print("Сейчас воспроизводится:");
Serial.println(in_data);
}
}
}
void errorMp3(){
if(myDFPlayer.readFileCountsInFolder(1)){myDFPlayer.playFolder(01,2);}
}
void printDetail(uint8_t type, int value){
switch (type) {
case TimeOut:
Serial.println(F("Время вышло"));
break;
case WrongStack:
Serial.println(F("Стек неправильный!"));
errorMp3();
break;
case DFPlayerCardInserted:
Serial.println(F("Карта вставлена!"));
break;
case DFPlayerCardRemoved:
Serial.println(F("Карта извлечена!"));
break;
case DFPlayerCardOnline:
Serial.println(F("Карта онлайн!"));
break;
case DFPlayerUSBInserted:
Serial.println("USB вставлен!");
break;
case DFPlayerUSBRemoved:
Serial.println("USB удален!");
break;
case DFPlayerPlayFinished:
Serial.println(F("Воспроизведение завершено!"));
break;
case DFPlayerError:
Serial.print(F("Ошибка DFPlayer:"));
switch (value) {
case Busy:
Serial.println(F("Карта не найдена "));errorMp3();
break;
case Sleeping:
Serial.println(F("Спящий "));errorMp3();
break;
case SerialWrongStack:
Serial.println(F("Получите неправильный стек"));errorMp3();
break;
case CheckSumNotMatch:
Serial.println(F("Контрольная сумма не совпадает "));errorMp3();
break;
case FileIndexOut:
Serial.println(F("Индекс файла вышел за пределы "));errorMp3();
break;
case FileMismatch:
Serial.println(F("Невозможно найти файл "));errorMp3();
break;
case Advertise:
Serial.println(F("В рекламе "));errorMp3();
break;
default:
break;
}
break;
default:
break;
}
}