5.4.8 Progetto 4.2 Music Box

Creeremo una scatola musicale e cambieremo i brani premendo i pulsanti.

1. Codice di prova

#include <musicESP32_home.h>
music Music(25);  // Initialize music player on GPIO25
#define btn1 16    // Button pin
int btn_count = 0; // Counter for button presses
boolean music_flag = 0; // Flag to trigger music playback

void setup()
{
  Serial.begin(9600);
  pinMode(btn1, INPUT);
  // Available music options:
  // Music.tetris();
  // Music.birthday();
  // Music.Ode_to_Joy();
  // Music.christmas();
  // Music.star_war_tone();
}

void loop()
{
  boolean btn1_val = digitalRead(btn1);

  if(btn1_val == 0) // If button is pressed
  {
    delay(10);  // 10ms delay for debouncing

    if(btn1_val == 0) // Confirm button is still pressed
    {
      boolean btn_state = 1;

      while(btn_state == 1) // Wait until button is released
      {
        boolean btn_val = digitalRead(btn1);

        if(btn_val == 1)  // If button is released
        {
          music_flag = 1;
          btn_count++;    // Increment press counter
          Serial.println(btn_count);

          // Cycle through 1-3 count
          if(btn_count == 4)
          {
            btn_count = 1;
          }

          // Play different song based on press count
          switch(btn_count)
          {
            case 1:
              if(music_flag == 1)
              {
                Music.Ode_to_Joy();
                music_flag=0;
              }
              break;

            case 2:
              if(music_flag == 1)
              {
                Music.christmas();
                music_flag=0;
              }
              break;

            case 3:
              if(music_flag == 1)
              {
                Music.tetris();
                music_flag=0;
              }
              break;
          }

          btn_state = 0;  // Exit wait loop
        }
      }
    }
  }
}

2. Risultato del test

Premere il pulsante 1 una volta: verrà riprodotto Tetris; premendolo di nuovo verrà riprodotta Ode to Joy; dopo la riproduzione, premere il pulsante 1 per la terza volta e verrà riprodotto Christmas.