Модуль mp3(DFPlayer). Помогите с кодом.

electric13
Offline
Зарегистрирован: 14.12.2016

Всем привет.

Картинку взял от сюда-https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299

Мне нужно добавить 2 кнопки, при таком условии:

- при нажатии на красную кнопку- играет 1 мелодия

- при нажатии на зеленую кнопку- играет 2 мелодия.

А остальные функции кода не нужны.

 

electric13
Offline
Зарегистрирован: 14.12.2016

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

О, и тут вы :) Я на амперке вам уже ответил, моги у здесь повторить, не вопрос, что называется :)

А какие сложности? Есть функция mp3_play в библиотеке для DFPlayer - её кличете, когда надо проиграть мелодию. Мелодии должны валяться в папке mp3 на флешке, и иметь имена вида 0001.mp3 и т.д. При этом вызов mp3_play(1) - проиграет файл 0001.mp3 на флешке.



Как отследить нажатие кнопки - примеров масса, даже на этом форуме. Инициализация плеера проста:

SoftwareSerial sSerial(10,11);
sSerial.begin(9600);
mp3_set_serial(sSerial);
delay(5000); // обычно жду 5 секунд, пока плеер прочухается
mp3_set_volume(30);

Добавлю лишь, что про кнопку - можно поискать поиском по форуму, а также в гугле "подключение кнопки к arduino".

electric13
Offline
Зарегистрирован: 14.12.2016

ООООО.

Здравствуйте. Какие люди.

Неожиданно. Финт не получился. 

 

 

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

electric13 пишет:

Неожиданно. Финт не получился. 

Ахах, шутка годная, спасибо, подняли настроение :)

electric13
Offline
Зарегистрирован: 14.12.2016
код получился такой:
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
 
void setup() 
{
  Serial.begin(9600);
mp3_set_serial(Serial);
delay(5000); // обычно жду 5 секунд, пока плеер прочухается
mp3_set_volume(30);
  
}
 
void loop() 
{
if(digitalRead(14)==HIGH)//если кнопка нажата ...
delay (100);
mp3_play (1);  // Проигрываем "mp3/0001.mp3"
else//если не нажата...
digitalWrite(LOW);
if(digitalRead(15)==HIGH)//если кнопка нажата ...
delay (100);
mp3_play (2);  // Проигрываем "mp3/0002.mp3"
else//если не нажата...
digitalWrite(LOW);
 
}
 
При проверке пишет ошибку-
 
pleer_mp3.ino:2:31: fatal error: DFPlayer_Mini_Mp3.h: No such file or directory
compilation terminated.
Ошибка компиляции.
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

#include "DFPlayer_Mini_Mp3.h"

electric13
Offline
Зарегистрирован: 14.12.2016

Кавычки помогли.
Теперь проверка пишет:
pleer_mp3:18:error: 'else'without a previous 'if'
pleer_mp3:24:error: 'else'without a previous 'if'

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Если больше одного "действия" в if то необходимо обрамлять {}

electric13
Offline
Зарегистрирован: 14.12.2016

А можете на коде показать. Всё равно ошибку показывает.
At global scope:
pleer_mp3:23:error: expected unqualified-id before '{' token 'else' without previous if

electric13
Offline
Зарегистрирован: 14.12.2016

))

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
 
void setup() 
{
  Serial.begin(9600);
mp3_set_serial(Serial);
delay(5000); // обычно жду 5 секунд, пока плеер прочухается
mp3_set_volume(30);
  
}
 
void loop() 
{
  if(digitalRead(14)==HIGH)//если кнопка нажата ...
  {
    delay (100);
    mp3_play (1);  // Проигрываем "mp3/0001.mp3"
  }
  else//если не нажата...
    digitalWrite(LOW);
  if(digitalRead(15)==HIGH)//если кнопка нажата ...
  {
    delay (100);
    mp3_play (2);  // Проигрываем "mp3/0002.mp3"
  }
  else//если не нажата...
    digitalWrite(LOW);
 
}

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

21, 28 строка не указано каким пинам LOW задается

electric13
Offline
Зарегистрирован: 14.12.2016

#include "SoftwareSerial.h"
#include "DFPlayer_Mini_Mp3.h"

void setup()
{
Serial.begin(9600);
mp3_set_serial(Serial);
delay(5000); // обычно жду 5 секунд, пока плеер прочухается
mp3_set_volume(30);

}

void loop()
{
if(digitalRead(14)==HIGH)//если кнопка нажата №1...
{
delay (100);
mp3_play (1); // Проигрываем "mp3/0001.mp3"
}
else //если не нажата...
digitalWrite(14,LOW);

if(digitalRead(15)==HIGH)//если кнопка нажата №2...
{
delay (100);
mp3_play (2); // Проигрываем "mp3/0002.mp3"
}
else //если не нажата...
digitalWrite(15,LOW);
}

Проверка пишет:
Изменены опции сборки, пересобираем всеpleer_mp3.cpp.o: In function `setup':
H:\arduino-nightly/pleer_mp3.ino:7: undefined reference to `mp3_set_serial(HardwareSerial&)'
H:\arduino-nightly/pleer_mp3.ino:9: undefined reference to `mp3_set_volume(unsigned int)'
pleer_mp3.cpp.o: In function `loop':
H:\arduino-nightly/pleer_mp3.ino:18: undefined reference to `mp3_play(unsigned int)'
H:arduino-nightly/pleer_mp3.ino:26: undefined reference to `mp3_play(unsigned int)'
collect2.exe: error: ld returned 1 exit status
Ошибка компиляции.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Проверяй куда библиотеку "установил". Английским по белому же написано что не находит определений функций, значит библиотека не подключилась.

electric13
Offline
Зарегистрирован: 14.12.2016

Библиотека DFPlayer_mini_MP3.h и SoftwareSerial.h лежит с этим же файлом с расширением .ino.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

а DFPlayer_Mini_Mp3.cpp где лежит?

electric13
Offline
Зарегистрирован: 14.12.2016

Спасибо. Заработало. Всё проверил. Нет ошибок.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

У меня все нормально компилируется. В IDE вкладка с DFPlayer_mini_MP3.h появляется? Какая версия ИДЕ? Открой h файл и посмотри, есть ли там вообще такие функции?

electric13
Offline
Зарегистрирован: 14.12.2016

Да. Спасибо большое. Всё работает!!!

evgencom
Offline
Зарегистрирован: 30.10.2017

Помогите с решением данной проблемы 

Ардуино uno

Суть такая есть два проигрывателя

пока первый проигрыватель работает его анализирует плата что все в порядке вск ок,

но когда первый проигрыватель вдруг сломался или еще что то с ним случилось, срабатывает резервный проигрыватель через релюху

вот часть кода

long vl,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10;
long hz=0;
long hzprev=0;
long tout=0;

void setup() {
pinMode(2, OUTPUT);//Светодиод
pinMode(3, INPUT);//Если есть напряжение или светодиод горит
pinMode(A0, INPUT);//Аудиовход
зшт
}
void loop() {
tout=millis()+600;
 while (tout>millis() && digitalRead(A0) > 10 );
 v1 = micros();
 while (tout>millis() && analogRead(A0) < 1);
 v2 = micros();
 while (tout>millis() && analogRead(A0) > 0 );
 v3 = micros();
 while (tout>millis() && analogRead(A0) < 1 );
 v4 = micros();
 while (tout>millis() && analogRead(A0) > 0 );
 v5 = micros();
 while (tout>millis() && analogRead(A0) < 1 );
 v6 = micros();
 while (tout>millis() && analogRead(A0) > 0 );
 v7 = micros();
 while (tout>millis() && analogRead(A0) < 1 );
 v8 = micros();
 while (tout>millis() && analogRead(A0) > 0 );
 v9 = micros();
 while (tout>millis() && analogRead(A0) < 1 );
 v10 = micros();
hzprev=1000000/(((v2-v1)+(v3-v2)+(v4-v3)+(v5-v4)+(v6-v5)+(v7-v6)+(v8-v7)+(v9-v8)+(v10-v9))/9);
 if (tout>millis()&&sq((hz+hzprev)/2-hzprev)>1000){
 hz=(hz+hzprev)/2;
 }
 hz=0;
 }
 //Перед тем, как зажечь нужный светодиод - тушим все
 digitalWrite(2, LOW);
if (hz>20 && hz<100){
 digitalWrite(2, HIGH);// если укладываемся в частоту hz>20 && hz<100, то светодиод начинает моргать
  digitalWrite(3, HIGH);//если есть напряжение на светодиоде то включить реле
 }
}

 

 
заранее спасибо
GrSnake
Offline
Зарегистрирован: 07.07.2019

electric13 пишет:

подскажите, подключил все по схеме. Идет сильный треск если подключен вывод RX плеера к ардуине, при этом управляется нормально. Пробовал также подключать к пинам RX TX ардуины и увеличивать номинал сопротивления. Динамик 8ом. В чем может быть проблема? может модуль бракованый.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

GrSnake пишет:

подскажите, подключил все по схеме. Идет сильный треск если подключен вывод RX плеера к ардуине, при этом управляется нормально. Пробовал также подключать к пинам RX TX ардуины и увеличивать номинал сопротивления. Динамик 8ом. В чем может быть проблема? может модуль бракованый.

Тут недавно была тема про это. ТС решил проблему, перестав непрерывно опрашивать модуль по Serial. Начал опрашивать раз в 2 секунды (емнип), и все прошло. Вот только ссылки нету 

GrSnake
Offline
Зарегистрирован: 07.07.2019

я его не опрашиваю, просто раз в 10 секунд включаю следующий трек функцией библиотеки DFPlayer_Mini_Mp3.h

для обычных цифровых пинов нашел костыль - просто выключаю пин после команды и включаю непосредственно перед её подачей

11 пин - ТХ ардуины, 10 - RX ардуины

    digitalWrite(11, HIGH);     
    mp3_next (); // Следующий трек
    digitalWrite(11, LOW); 
    delay (10000); // пуза 10 секунд
 
вот только мне было бы лучше использовать пины 0 и 1, плата уже под них разведена
 
жаль ссылки на тему где обсуждалась подобная проблема у Вас нет, я что-то не нашел.
v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

GrSnake пишет:

вот только мне было бы лучше использовать пины 0 и 1, плата уже под них разведена
 
Значит у вас кроме управления плеером идет другой обмен по сериалу. Он и шумит
GrSnake
Offline
Зарегистрирован: 07.07.2019

в том то и дело что нет. весь скетч 4 строчки кода.

да и пины 10 и 11 так же шумят

Vergily
Offline
Зарегистрирован: 01.09.2020

Я ставил резисторы 1k на оба провода и Rx и Tx.

Если не поможет, иногда рекомендуют еще поставить  конденсатор 10uF https://github.com/DFRobot/DFRobotDFPlayerMini/issues/20