Проблема с воспроизведением mp3 в библиотеке DFRobotDFPlayerMini

Kirill Zima
Offline
Зарегистрирован: 01.02.2020

Здравствуйте, у меня проблема с кодом ардуино. Библиотека DFRobotDFPlayerMini (https://github.com/DFRobot/DFRobotDFPlayerMini)

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



 

#include "SoftwareSerial.h"
#define BTN_PIN 3
#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"
boolean butt_flag = 0;
boolean butt;
boolean pl;
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;

void setup()
{
butt = !digitalRead(3);
mySoftwareSerial.begin(9600);
Serial.begin(115200);
if (!myDFPlayer.begin(mySoftwareSerial)) {
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){
delay(0);
}
}
Serial.println(F("DFPlayer Mini online."));
pl = 0;
myDFPlayer.volume(30); 
myDFPlayer.play(1);
}

void loop()
{
butt = !digitalRead(3);
if (butt == 1 && butt_flag == 0) {
butt_flag = 1;
pl = !pl;
}
if (pl == 1)
myDFPlayer.play();
else myDFPlayer.pause();
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что означают строки №№20-22?

Kirill Zima
Offline
Зарегистрирован: 01.02.2020

Здравствуйте, 20-22 строку выполняют цикл проверки сбоев в softserial.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Точно? А если подумать? Например, можете сказать когда и при каких условиях этот цикл заканчивается?

Kirill Zima
Offline
Зарегистрирован: 01.02.2020

я пробовал убирать его, не помогло.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я не спрашиваю Вас что Вы пробовали убирать, а что не пробовали. Я Вас спросил:

1. что означают строки №№20-22?

А когда Вы ответили что-то про цикл проверки, я спросил

2. когда и при каких условиях этот цикл заканчивается?

Ответа пока не получил.

Kirill Zima
Offline
Зарегистрирован: 01.02.2020

заканчивается при значении 0(false), когда все исправно работает.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Цикл while(true) не заканчивается никогда. Если программа на него попадёт, то останется в нём навечно. Запомните это.

Следующий вопрос. Допустим, что условие в строке №33 выполнилось. Тогда в строке №34 переменная станет butt_flag равной 1. Вопрос: где, когда и при каких обстоятельствах она снова станет равна 0?