Пишу прошивку для тагера c MilesTag II совместимостью. Реализовано почти все, кроме звуков.
С ними никак не могу разобраться
Использую библиотеку DFPlayer_Mini_Mp3
Подскажите, куда мне двигаться.
Вот кусок кода
void setup()
{
pinMode(5, INPUT_PULLUP); // Спусковой выключатель
pinMode(4, INPUT_PULLUP); // Кнопка перезарядки
pinMode(2, OUTPUT);
IrReceiver.begin(7);
Serial.begin(9600);
while (!Serial);
mp3_set_serial(Serial);
delay (100);
mp3_set_volume (20);
}
void loop() {
if (!digitalRead(4)) { //Перезарядка
switch (ammo) {
case 0:
switch (ammobx) {
case 0:
break;
default:
ammo = 10;
ammobx = ammobx - 1;
mp3_play(1); // звук перезарядки
delay (4000);
}
break;
}
}
if (!digitalRead(5)) { //Выстрел
switch (hp) {
case 0 :
break;
default:
switch (ammo) {
case 0 :
mp3_play(3); // Звук нет патронов
delay (1000);
break;
default:
MTsend.Shot(playerId, teamId, WeaponDamage);
ammo = ammo - 1;
delay (100);
mp3_play(2); // Звук выстрела
Serial.println(ammo, DEC);
delay (3000);
}
}
}
Одновременно - нельзя.
Теоретически, возможно, можно было бы поочередно. Но чтобы это стало возможно, необходимо предпринять какие-то действия, чтобы MP3-плеер реагировал только на предназначенные ему команды и не реагировал на все остальное. Есть идеи, как это обеспечить?
Отнюдь.
Вообще-то она допустима для любого контроллера. Хотя имеет смысл только для контроллеров с аппаратным USB. Навскидку не припомню про Due (там два USB порта), а вот для stm32 - точно нужна. Хотя нужно отметить, что еще минимум парочка последовательных портов там тоже есть.
А этот тезис, милостивый государь, вынужден оспорить. Терминологически аппаратной (реализация - женский род) скорее следует назвать реализацию на отдельном “аппарате”, то есть USB-UART контроллере, не требующим времени для установки рабочего режима. А вот реализацию в AVR Atmega 32U4 или в STM32 следует именовать программной. Так как стек протоколов USB реализуется программно. Но сама поддержка таковой возможности - бесспорно есть в аппаратной части упомянутых контроллеров. С учетом этого замечания таковую реализацию можно именовать комбинированной.
Таким образом получим три типа реализации поддержки USB в микроконтроллерах:
Аппаратная - отдельным чипом, к примеру CH341;
Программная - используя всем известный пакет vusb;
Комбинированная - на контроллерах со встроенной поддержкой физической части интерфейса USB - таких как AVR ATmega 32U4 и так далее.
Воспроизведения звука добился, но возникла новая проблема.
Воспроизводит только один раз. Для следующего раза требуется либо перезагрузить питание, либо извлечь - вставить карту.
У кого-нибудь такое было? Может есть вариант повторной инициализации плеера после каждого воспроизведения? До других вариантов додуматься не могу