Помогите плиз: ардуина и DFPlayerMini Player
- Войдите на сайт для отправки комментариев
Сб, 04/02/2017 - 23:41
Ардуина в цикле loop опрашивает датчики - при сработке воспроизводит соответствующий mp3 с DFPlayerMini Player.
Так как в цикле при сработке ардуина постоянно дёргает мр3 модуль на воспризведение - он не успевает что-либо воспроизвести. ( delay не предлагать =) )
Вопрос: как сделать, чтоб при сработке мр3 модуль проиграл три раза и замолчал (независимо от состояния датчика) ?
........ void loop() { if(digitalRead(24)==HIGH){ // сработал датчик in24 in24 = 1; // ставим флаг в единицу (вкл) Notify(1); // включаем оповещение ??? } else{ in24 = 0; } } ..... int Notify(int x) //функция оповещения { if (x==1) { Player.play(1); // оповещение о сработке } }
А почему бы не завести с модуля сигнал от его состоянии? И проверять его. И только если он готов то запускать воспроизведение.
Вы имеете ввиду программно или аппаратно ?
Если программно
как сообщить модулю , что после первой принятой еденицы с Tx МК - остальные игнорировать?
А если аппаратно - использовать выходной сигнал на звук? и использовать в МК как прерывание?
Нужно ввести переменную состояния - запустили воспроизведение и установили переменную. При последующих активациях датчиков - читаем переменную и решаем нужно ли запускать восприизведение.
Организуете ли вы это ввиде одной переменной типа int и чтения ее 16 битов или массива где каждый элемент соответвует состоянию воспроизведения для датчика.
Можно использовать разные состояяния : 0 - никогда не восприизводилось, 1 - воспроизводилось, 2 воспроизводится сейчас, 3 - в очереди на воспроизведение.
Можно сделать массив очереди и добавлять туда датчики в порядке их сработки.
P.S. У DFPlayer есть пин который устанавливается в 1 когда модуль что-то воспроизводит.
Спасибо большое, за идеи - пробую варианты с переменной состояния модуля в коде.
А пока решил свой вопрос аппаратно:
подключил по Вашему совету 16 ногу DFPlayerMini Player(а) на вход МК и дописал пару строчек кода:
Ещё раз спасибо. Тему можно закрывать.