// Определение пина для пьезоизлучателя и кнопок
const int buzzerPin = 9;
const int buttonPin = 2; // Пин кнопки для изменения темпа
const int melodySwitchPin = 3; // Пин кнопки для смены мелодии

// Длины мелодий
const int songLength1 = 18;
const int songLength2 = 18;

// Первая мелодия (например, "Братушки")
char notes1[] = "cdfda ag cdfdg gf "; // Ноты
int beats1[] = {1,1,1,1,1,1,4,4,2,1,1,1,1,1,1,4,4,2};

// Вторая мелодия (например, "Happy Birthday")
char notes2[] = "g g a g c b "; 
int beats2[] = {1,1,1,1,1,1};

// Темп мелодии (если кнопка нажата, темп меняется)
int tempo = 150;
int currentSong = 1; // Индекс текущей мелодии

void setup() {
  pinMode(buzzerPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  pinMode(melodySwitchPin, INPUT);
}

void loop() {
  int i, duration;
  
  // Изменение темпа по кнопке
  if (digitalRead(buttonPin) == HIGH) {
    tempo = 100; // Уменьшаем темп, если кнопка нажата
  } else {
    tempo = 150; // Иначе возвращаем стандартный темп
  }
  
  // Переключение между мелодиями по другой кнопке
  if (digitalRead(melodySwitchPin) == HIGH) {
    currentSong = (currentSong == 1) ? 2 : 1; // Переключаем мелодию
    delay(300); // Антидребезг
  }

  // Воспроизведение выбранной мелодии
  if (currentSong == 1) {
    for (i = 0; i < songLength1; i++) {
      duration = beats1[i] * tempo;
      if (notes1[i] == ' ') {
        delay(duration);  // Пауза
      } else {
        tone(buzzerPin, frequency(notes1[i]), duration);  // Играть ноту
        delay(duration);
      }
      delay(tempo / 10); // Небольшая пауза
    }
  } else if (currentSong == 2) {
    for (i = 0; i < songLength2; i++) {
      duration = beats2[i] * tempo;
      if (notes2[i] == ' ') {
        delay(duration);  // Пауза
      } else {
        tone(buzzerPin, frequency(notes2[i]), duration);  // Играть ноту
        delay(duration);
      }
      delay(tempo / 10); // Небольшая пауза
    }
  }
  
  while(true) {} // Зацикливаем, чтобы мелодия не повторялась
}

int frequency(char note) {
  int i;
  const int numNotes = 8;  // Количество нот
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int frequencies[] = {262, 294, 330, 349, 392, 440, 494, 523}; // Частоты

  // Поиск частоты для заданной ноты
  for (i = 0; i < numNotes; i++) {
    if (names[i] == note) {
      return(frequencies[i]);
    }
  }

  return(0); // Если нота не найдена, возвращаем 0 (тишина)
}