Воспроизведение звуков. Лазертаг

Пишу прошивку для тагера 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_set_serial(Serial); 
....
mp3_play(2);                                           // Звук выстрела
Serial.println(ammo, DEC);

Аналогию понял, причины не совсем. Серийный порт не может использоваться одновременно для отправки сигнала на mp3 модуль и вывода информации?

Физически - может. Но последствия непрогнозируемы.

Одновременно - нельзя.
Теоретически, возможно, можно было бы поочередно. Но чтобы это стало возможно, необходимо предпринять какие-то действия, чтобы MP3-плеер реагировал только на предназначенные ему команды и не реагировал на все остальное. Есть идеи, как это обеспечить?

А разве ему не насрать на команды, которых он не понимает?

Может и нет. Попробуйте для начала использовать сериал только для общения с плеером

Когда я подаю питание на плеер на нем загорается красны светодиод и тут же гаснет.
Это нормально?

Схема, код для проверки.

А ведь никто не уточнил у ТС: какой контроллер?
Вот это строка

while (!Serial);

применима ТОЛЬКО для Леонардо/Микро, то есть для 32U4. А в нем есть второй сериал, тащемта. ;))

У меня nano 328p

тогда откуда* ты достал стр.8?

"Отредактированно

Да эта фигня много где “рекомендуется”. Без пояснения.
Закопипастил где-то, вот и всё.

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

Отнюдь.
Вообще-то она допустима для любого контроллера. Хотя имеет смысл только для контроллеров с аппаратным USB. Навскидку не припомню про Due (там два USB порта), а вот для stm32 - точно нужна. Хотя нужно отметить, что еще минимум парочка последовательных портов там тоже есть.

Представьте себе!

С этим, пожалуй соглашусь.

А этот тезис, милостивый государь, вынужден оспорить. Терминологически аппаратной (реализация - женский род) скорее следует назвать реализацию на отдельном “аппарате”, то есть USB-UART контроллере, не требующим времени для установки рабочего режима. А вот реализацию в AVR Atmega 32U4 или в STM32 следует именовать программной. Так как стек протоколов USB реализуется программно. Но сама поддержка таковой возможности - бесспорно есть в аппаратной части упомянутых контроллеров. С учетом этого замечания таковую реализацию можно именовать комбинированной.
Таким образом получим три типа реализации поддержки USB в микроконтроллерах:

  1. Аппаратная - отдельным чипом, к примеру CH341;
  2. Программная - используя всем известный пакет vusb;
  3. Комбинированная - на контроллерах со встроенной поддержкой физической части интерфейса USB - таких как AVR ATmega 32U4 и так далее.

Воспроизведения звука добился, но возникла новая проблема.
Воспроизводит только один раз. Для следующего раза требуется либо перезагрузить питание, либо извлечь - вставить карту.
У кого-нибудь такое было? Может есть вариант повторной инициализации плеера после каждого воспроизведения? До других вариантов додуматься не могу