Ход работы

  1. Изучили материал
  2. Сделали схему и задали значения переменных, массивов
#include <LiquidCrystal.h> //библиотека lcd экрана
const int rs = 12, e = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //разъемы подключения lcd экрана 
LiquidCrystal lcd(rs, e, d4, d5, d6, d7); //определение разъемов

int switch_button = 1;  //переменная для переключения песен
int switch_mode = 0; //переменная для переключения режима

//массив типа данных byte содержат картинку         
byte deathnote[8] = {0b00011,0b00010,0b00010,0b00010,0b01110,0b10010,0b10010,0b01100};

#define ACTIVATED LOW //переменные типа данных define не занимают программной памяти, а также программа сама подставляет значение независимо от данных

#define buzzer    1  // пин с пищалкой 

//пины с кнопками
#define BUTTON10_PIN 10
#define BUTTON9_PIN 9
#define BUTTON8_PIN 8
#define BUTTON7_PIN 7

int tempo = 225;  //скорость мелодии 
int notes = sizeof(melody) / sizeof(melody[0]) / 2; //sizeof возвращает длину в байта
int wholenote = (60000 * 4) / tempo; //вычисляет продолжительность всей ноты в мс
int divider = 0, noteDuration = 0;  //делитель и продолжительность ноты

//установка пина и картинки
void setup()
{
  pinMode(buzzer, OUTPUT); //пищалка
  lcd.createChar(1, deathnote); //картинка 
}

3. Нашли в интернете ноты и составленные мелодии

//пример нот 
#define NOTE_B0  31 //число - высота ноты в герцах
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44

//массив нот для одной из мелодий. PROGMEM перемещает информацию во флеш память, так как она слишком длинная
const int melody[] PROGMEM = {
  NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_FS3, -16, NOTE_D3, -16, NOTE_B2, -16, NOTE_A3, -16, NOTE_FS3, -16, NOTE_B2, -16, NOTE_D3, -16, NOTE_FS3, -16, NOTE_A3, -16, NOTE_FS3, -16, NOTE_D3, -16, NOTE_B2, -16,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_B3, -16, NOTE_G3, -16, NOTE_E3, -16, NOTE_G3, -16, NOTE_B3, -16, NOTE_E4, -16, NOTE_G3, -16, NOTE_B3, -16, NOTE_E4, -16, NOTE_B3, -16, NOTE_G4, -16, NOTE_B4, -16,NOTE_A2, 8, NOTE_A2, 8, NOTE_A3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_G3, 8, NOTE_A2, 8, NOTE_A2, 8,NOTE_F3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_DS3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_E3, 8, NOTE_F3, 8,NOTE_A2, 8, NOTE_A2, 8, NOTE_A3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_G3, 8, NOTE_A2, 8, NOTE_A2, 8,NOTE_F3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_DS3, -2,NOTE_A2, 8, NOTE_A2, 8, NOTE_A3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_G3, 8, NOTE_A2, 8, NOTE_A2, 8,NOTE_F3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_DS3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_E3, 8, NOTE_F3, 8,NOTE_A2, 8, NOTE_A2, 8, NOTE_A3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_G3, 8, NOTE_A2, 8, NOTE_A2, 8,NOTE_A3, -16, NOTE_F3, -16, NOTE_D3, -16, NOTE_A3, -16, NOTE_F3, -16, NOTE_D3, -16, NOTE_C4, -16, NOTE_A3, -16, NOTE_F3, -16, NOTE_A3, -16, NOTE_F3, -16, NOTE_D3, -16,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_CS3, 8, NOTE_CS3, 8, NOTE_CS4, 8, NOTE_CS3, 8, NOTE_CS3, 8, NOTE_B3, 8, NOTE_CS3, 8, NOTE_CS3, 8,NOTE_A3, 8, NOTE_CS3, 8, NOTE_CS3, 8, NOTE_G3, 8, NOTE_CS3, 8, NOTE_CS3, 8, NOTE_GS3, 8, NOTE_A3, 8,NOTE_B2, 8, NOTE_B2, 8, NOTE_B3, 8, NOTE_B2, 8, NOTE_B2, 8, NOTE_A3, 8, NOTE_B2, 8, NOTE_B2, 8,NOTE_G3, 8, NOTE_B2, 8, NOTE_B2, 8, NOTE_F3, -2,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_B3, -16, NOTE_G3, -16, NOTE_E3, -16, NOTE_G3, -16, NOTE_B3, -16, NOTE_E4, -16, NOTE_G3, -16, NOTE_B3, -16, NOTE_E4, -16, NOTE_B3, -16, NOTE_G4, -16, NOTE_B4, -16,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_FS3, -16, NOTE_DS3, -16, NOTE_B2, -16, NOTE_FS3, -16, NOTE_DS3, -16, NOTE_B2, -16, NOTE_G3, -16, NOTE_D3, -16, NOTE_B2, -16, NOTE_DS4, -16, NOTE_DS3, -16, NOTE_B2, -16,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_E4, -16, NOTE_B3, -16, NOTE_G3, -16, NOTE_G4, -16, NOTE_E4, -16, NOTE_G3, -16, NOTE_B3, -16, NOTE_D4, -16, NOTE_E4, -16, NOTE_G4, -16, NOTE_E4, -16, NOTE_G3, -16,  NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_A2, 8, NOTE_A2, 8, NOTE_A3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_G3, 8, NOTE_A2, 8, NOTE_A2, 8,NOTE_F3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_DS3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_E3, 8, NOTE_F3, 8,NOTE_A2, 8, NOTE_A2, 8, NOTE_A3, 8, NOTE_A2, 8, NOTE_A2, 8, NOTE_G3, 8, NOTE_A2, 8, NOTE_A2, 8,NOTE_A3, -16, NOTE_F3, -16, NOTE_D3, -16, NOTE_A3, -16, NOTE_F3, -16, NOTE_D3, -16, NOTE_C4, -16, NOTE_A3, -16, NOTE_F3, -16, NOTE_A3, -16, NOTE_F3, -16, NOTE_D3, -16,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, -2,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_C3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_AS2, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_B2, 8, NOTE_C3, 8,NOTE_E2, 8, NOTE_E2, 8, NOTE_E3, 8, NOTE_E2, 8, NOTE_E2, 8, NOTE_D3, 8, NOTE_E2, 8, NOTE_E2, 8,NOTE_B3, -16, NOTE_G3, -16, NOTE_E3, -16, NOTE_B2, -16, NOTE_E3, -16, NOTE_G3, -16, NOTE_C4, -16, NOTE_B3, -16, NOTE_G3, -16, NOTE_B3, -16, NOTE_G3, -16, NOTE_E3, -16,  
};

4. Написали вспомогательные функции

void Switch_mode() //функция для смены режима с пианино на мелодии и обратно
{
  if(digitalRead(BUTTON10_PIN) == LOW) //если кнопка нажата
  {
    if(switch_mode == 0) //изначально равен 0, поэтому первый режим пианино. Если равен 0, то будет равен 1
    {
      switch_mode = 1;
    }
    else if(switch_mode == 1) //и наоборот 
    {
      switch_mode = 0;
    }
  }
}

void note_write_song() //выводит слева снизу и справа снизу картинку ноты
{
  lcd.setCursor(0,1);
  lcd.write(1);
  lcd.setCursor(15,1);
  lcd.write(1);
}

void lcd_write_note(const char* note) //выводит название ноты
{
  lcd.setCursor(7,0);
  lcd.print(note);
}

5. Далее все применялось и писалось в основном цикле

void loop()
{
  lcd.begin(16, 2); //установка размера экрана

  if(switch_mode == 0) //если режим пианино (0), то
  {
    for(int i = 0; i<8; i=i+2) //цикл для вывода картинки снизу и сверху до середины 
    {
      lcd.setCursor(i,0);
      lcd.write(1);
      lcd.setCursor(i,1);
      lcd.write(1);
    }
    for(int y = 9; y<16; y=y+2) //цикл для вывода картинки снизу и сверху после середины 
    {
      lcd.setCursor(y,0);
      lcd.write(1);
      lcd.setCursor(y,1);
      lcd.write(1);
    }
    while(digitalRead(BUTTON7_PIN) == ACTIVATED) //если кнопка нажато, то
    {
      tone(buzzer,NOTE_G3); //проигрывает ноту G3
      lcd_write_note("G3"); //применяется функция, которая выводит ноту G3 на экран
    }
    while(digitalRead(BUTTON8_PIN) == ACTIVATED)
    {
      tone(buzzer,NOTE_C4);
      lcd_write_note("C4");
    }
    while(digitalRead(BUTTON9_PIN) == ACTIVATED)
    {
      tone(buzzer,NOTE_F4);
      lcd_write_note("F4");
    }
    noTone(buzzer); //останавливает воспроизведения сигнала функции tone() 
    if(digitalRead(BUTTON10_PIN) == LOW) //если кнопка нажата, то запускается функция
    {
      Switch_mode();
    }
      
 
  }
    
  else if(switch_mode == 1) //если режим мелодий (1), то
  {
   
    if(switch_button == 1) //переключение мелодий 
    {
      
      lcd.print("Doom OST. - E1M1"); //вывод названия
      note_write_song(); //применение функции 
      for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) //цикл перебирает ноты мелодии
      {
        //вычисление продолжительности каждой ноты
        divider = pgm_read_word_near(melody+thisNote + 1);
        if (divider > 0)  //если продолжительность ноты больше 0, то 
        {
          noteDuration = (wholenote) / divider; //высчитывается значение и приравнивается к переменной noteDuration
        } 
        else if (divider < 0) //если меньше, то
        {
          noteDuration = (wholenote) / abs(divider); //abs() берет модуль числа
          noteDuration *= 1.5;
        }
        tone(buzzer, pgm_read_word_near(melody+thisNote), noteDuration * 0.9); //нота проигрывается на 90%, 10% на паузу 
        delay(noteDuration); //задержка равная длительности ноты
        noTone(buzzer);
        if(digitalRead(BUTTON10_PIN) == LOW) //если кнопка нажата, то меняется режим
        {
          Switch_mode();
          break;
        }

        if (digitalRead(BUTTON7_PIN) == LOW)  //если кнопка нажата, то меняется мелодия
        {
          switch_button = 0;
          break;
        }
      }
    }
//далее все также 
    else if (switch_button == 0)
    {
      lcd.setCursor(2,0);
      lcd.print("Beethoven -");
      lcd.setCursor(3,1);
      lcd.print("Fur Elise");
      note_write_song();
      for (int thisNote = 0; thisNote < notes_2 * 2; thisNote = thisNote + 2) 
      {
        divider = pgm_read_word_near(melody_2+thisNote + 1);
        if (divider > 0) 
        {
          noteDuration = (wholenote_2) / divider;
        } 
        else if (divider < 0) 
        {
          noteDuration = (wholenote_2) / abs(divider);
          noteDuration *= 1.5;
        }

        tone(buzzer, pgm_read_word_near(melody_2+thisNote), noteDuration * 0.9);
        delay(noteDuration);
        noTone(buzzer);
          if(digitalRead(BUTTON10_PIN) == LOW)
          {
            Switch_mode();
            break;
          }
          if (digitalRead(BUTTON7_PIN) == LOW) 
          {
            switch_button = 2;
            break;
          }
      }

      }
    else if (switch_button == 2)
    {
      lcd.setCursor(6,0);
      lcd.print("a-ha");
      lcd.setCursor(3,1);
      lcd.print("Take On Me");
      note_write_song();
      for (int thisNote = 0; thisNote < notes_3 * 2; thisNote = thisNote + 2) 
      {
        divider = melody_3[thisNote + 1];
        if (divider > 0) 
        {
          noteDuration = (wholenote_3) / divider;
        } 
        else if (divider < 0) 
        {
          noteDuration = (wholenote_3) / abs(divider);
          noteDuration *= 1.5; 
        }

        tone(buzzer, melody_3[thisNote], noteDuration * 0.9);
        delay(noteDuration);
        noTone(buzzer);
        if(digitalRead(BUTTON10_PIN) == LOW)
        {
          Switch_mode();
          break;
        }
        if (digitalRead(BUTTON7_PIN) == LOW) 
        {
          switch_button = 1;
          break;
        }
      }
    }   
  }
}

Как работает музыкальная пищалка

Запускается режим пианино:
Выводятся картинки нот.
По нажатию кнопки равной пину (7, 8, 9) проигрываются ноты и выводятся названия нот.
Если пользователь нажимает на кнопку под пином 10, то
Переключается на режим проигрывания мелодий:
Запускается первая мелодия.
Выводится название и картинка двух символов ноты слева снизу и справа снизу.
Если пользователь нажмет на кнопку под пином 7, то переключится мелодия на следующую.
Далее все происходит по той-же схеме, что и с первой мелодией.
С третьей мелодией все также.
Если пользователь еще раз нажмет на кнопку под пином 10, то режим переключится обратно на пианино и так по кругу.

Ссылка на проект
https://www.tinkercad.com/things/8OOZUgZYbUC-swanky-fulffy/editel?sharecode=fj6-xKfkeKnpbjRL-iE1S2N55lf1xCjwlpcmqW6bR6E

Компоненты

  • Пьезоэлемент – 1
  • Резистор 220 Ом – 5
  • Кнопка – 4
  • LCD 1602 – 1
Макетка
Arduino UNO R3

Cхема подключения компонентов к плате

Возможности применения в жизни

Пьезоэлемент можно применить для:

  • Игрушек с музыкой
  • Музыкального проигрывателя
  • В какой-либо технике, требующей проигрывания звуков/музыки

Видео работы

Картинка ноты сломалась в жизни