Здравствуйте, многоуважаемые профессионалы!
Не ругайте за мой @овно код.
Есть задача - много кнопок по нажатию на которые должны воспроизводиться короткие аудиофайлы, типа взрывы и т.п.
Нужно нажать на кнопку и должен воспроизвестись аудиофайл ОДИН раз.
Кнопок разные - одни с фиксацией, другие нет. Нужно сделать так, чтобы по нажатию формировался импульс, который включал бы аудиофайл с df mp3 player’а.
MP3 DF PLAYER’а у меня две штуки и один воспроизводит длинные аудиофайлы, другой короткие. Соответственно я не могу ставить в конце каждого аудиофайла delay(), так как не хочу чтобы весь код тормозился и ждал пока этот файл отыграет.
На данный момент пока нажата кнопка mp3dfplayer бесконечно быстро запускает аудиофайл, думаю с каждым циклом, а как только отжимаешь кнопку начинает играть аудиофайл нормально и ОДИН раз.
Сейчас мне нужно включить аудиофайл только ОДИН раз и без delay().
Что я делаю не так?
#include <DFRobotDFPlayerMini.h>
#include <SoftwareSerial.h>
SoftwareSerial mySoftwareSerial(15, 14); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void setup()
{
Serial.begin(9600);
mySoftwareSerial.begin(9600);
myDFPlayer.begin(mySoftwareSerial);
myDFPlayer.disableDAC();
myDFPlayer.volume(5);
pinMode(24, INPUT_PULLUP);
pinMode(10, OUTPUT);
digitalWrite(10, LOW);
}
bool test = false;
uint32_t btnTimer = 0;
void loop()
{
bool btnState = !digitalRead(24);
if (btnState && !test && millis() - btnTimer > 100) {
test = true;
btnTimer = millis();
Serial.println("press");
}
if (btnState && test && millis() - btnTimer > 500) {
btnTimer = millis();
Serial.println("press hold");
}
if (!btnState && test && millis() - btnTimer > 500) {
test = false;
btnTimer = millis();}
Serial.println("hold");
if (test == true) {
digitalWrite(10,HIGH);
myDFPlayer.play(5);}
else {digitalWrite(10,LOW);
}
}