Похоже кому-то просто нечем заняться 1 января…
Буму))
Ну , и?
P.S. И ещё. Странно, что я сразу не обратил внимание на это:
Спойлер
Такой подход не годится.
Многократное обращение к плееру в условии?
Пока будем обращаться к плееру, очередной раз, ситуация может измениться. Отсюда и разночтения.
Надо примерно так: один раз на проход loop() опрашиваем плеер, и сохраняем значения в переменные.
Потом с ними работаем в условии.
Спойлер
static uint8_t rdType = 0;
static uint16_t Rd = 0;
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read());
// Serial.println(ase);//Вывести подробное сообщение от DFPlayer для обработки
// различных ошибок и состояний.
}
/*
rdType = readType();
Rd = read();
*/ // Выбрать какой нибудь вариант
rdType = myDFPlayer.readType();
Rd = myDFPlayer.read();
if (rdType == 3 && Rd == 0) {
//Если карта памяти не вставлена, то вывжу json инфу об этом клиенту
doc["SD"] = "mp3";
doc["MP3"] = ID;
doc["statusText"] = "Карта памяти не вставлена! 0000";
doc["status"] = false;
} else {
Serial.println();
Serial.print(rdType);
Serial.print("|");
Serial.print(Rd);
Serial.println();
if (rdType == 6 && Rd == 6) {
//Если файла нет
doc["SD"] = "mp3";
doc["MP3"] = ID;
doc["statusText"] = "Такого файла нет! 0";
doc["status"] = false;
doc["E1"] = rdType;
doc["E2"] = Rd;
} else if (rdType == 5 && Rd == 1) {
//Если файл есть
doc["SD"] = "mp3";
doc["MP3"] = ID;
doc["statusText"] = "Файл воспроизводится! 1";
doc["status"] = true;
doc["E1"] = rdType;
doc["E2"] = Rd;
} else {
//Если что то пошло не так
doc["SD"] = "mp3";
doc["MP3"] = ID;
doc["statusText"] = "Произошла не известная ошибка!";
doc["status"] = false;
doc["E1"] = rdType;
doc["E2"] = Rd;
}
}
Заведите уже enum’ы, сами то помните что всё эти цифры (5/6/0/3 и тд) означают?
Есть же комментарии))
Стараюсь исправлять “родной” код как можно меньше, самое необходимое. Или это будет уже другой код
А так да, в библиотеке уже есть дефайны, можно пользоваться
Спасибо что выделяете время, что то советуете. К сожлению я пока не решил проблему, но по экспериментировав немного, я пришел к такому мнению, что статус воспроизведения происходит в следующем цикле loop после воспроизведения mp3. Как это профиксить, не могу понять.
что я сделал?
if (GET == "dir") {
if (DIR == "mp3") {
//если я пытаюсь запустить файл из папки mp3
if (GET1 == "name") { //Проверяю название параметра
if (ID > 0) {
myDFPlayer.playMp3Folder(ID);
if (myDFPlayer.available()) {
rdType = myDFPlayer.readType();
Rd = myDFPlayer.read();
printDetail(rdType, Rd);// тут тоже выводит предыдущее значение
Serial.println(rdType );
Serial.println(Rd );
doc["SD"] = "mp3";
serializeJsonPretty(doc, client);
}
break;
}
}
}
}
в этом случае у меня воспроизводит несколько раз аудио, но страница с json не загружается. так же я пробовал делать паузу после воспроизведения аудио, так же… У меня получилось пру рааз профиксить эту проблему, когд я раз 5 запускал mp3, типа такого:
myDFPlayer.volume(0);delay(30);
myDFPlayer.playMp3Folder(ID);delay(30);
myDFPlayer.playMp3Folder(ID);delay(30);
myDFPlayer.playMp3Folder(ID);delay(30);
myDFPlayer.playMp3Folder(ID);delay(30);
myDFPlayer.playMp3Folder(ID);
myDFPlayer.volume(30);
но даже в этом случае я как правило получал не всегда верные данные.
if (!myDFPlayer.begin(mySoftwareSerial, false, true)) {
использовав этот код у меня просто ничего не происходит
наверное придется делать редирект и следующим циклом получть значения…
Для понимания происходящего необходим кратенький скетч, в котором следует:
a) дать команду плееру;
b) покрутится в цикле, считывая и выводя в дебаг статусы и время их смены.
Таким образом получите таймлайн, на котором будут отмечены как все стадии процессинга плеера, их длительность и задержки между ними.
После этого чешите голову - уложить их в конечный автомат или пары дилэев достаточно будет.
Жаль нет у меня такого плеера, было бы всё проще…
Попробуйте так
Спойлер
if (GET == "dir") {
if (DIR == "mp3") {
//если я пытаюсь запустить файл из папки mp3
if (GET1 == "name") { //Проверяю название параметра
if (ID > 0) {
myDFPlayer.playMp3Folder(ID);
//=======================================
uint8_t waitmr = 0;
//ждём плеер
while (!myDFPlayer.available() && waitmr++ < 100))//100*4=400мс
delay(4);//Подобрать таймаут выхода из ожидания
//=====================================
if (myDFPlayer.available()) {
rdType = myDFPlayer.readType();
Rd = myDFPlayer.read();
printDetail(rdType, Rd);// тут тоже выводит предыдущее значение
Serial.println(rdType );
Serial.println(Rd );
doc["SD"] = "mp3";
doc["E1"] = rdType;
doc["E2"] = Rd;
serializeJsonPretty(doc, client);
}
break;// )))
}
}
}
}
Сама железка, вроде бы, ничем не отличается от такой:
Увы, никакой нет))
Закажи. Не дорого. Я для экспериментов брал ))