// Projetos de Eletrônica - Werá Barbosa
// Música: Parabéns para Você (Versão Corrigida)

// Definição das frequências das notas musicais
#define NOTE_C4  262  // Dó
#define NOTE_D4  294  // Ré
#define NOTE_E4  330  // Mi
#define NOTE_F4  349  // Fá
#define NOTE_G4  392  // Sol
#define NOTE_A4  440  // Lá
#define NOTE_AS4 466  // Sí Bemol (Adicionado para corrigir o final!)
#define NOTE_B4  494  // Si
#define NOTE_C5  523  // Dó (Agudo)

int pinoBuzzer = 8; // Pino onde o buzzer está conectado

// Lista das notas da música na sequência certinha (25 notas)
int melodia[] = {
  NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_F4, NOTE_E4,         // Pa-ra-béns pra vo-cê
  NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_G4, NOTE_F4,         // Nes-sa da-ta que-ri-da
  NOTE_C4, NOTE_C4, NOTE_C5, NOTE_A4, NOTE_F4, NOTE_E4, NOTE_D4,  // Mui-tas fe-li-ci-da-des
  NOTE_AS4, NOTE_AS4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_F4        // Mui-tos a-nos de vi-da (Corrigido!)
};

// Tempo de duração de cada nota (valores maiores = mais demorado)
int duracaoNotas[] = {
  4, 4, 2, 2, 2, 1,
  4, 4, 2, 2, 2, 1,
  4, 4, 2, 2, 2, 2, 1,
  4, 4, 2, 2, 2, 1
};

void setup() {
  pinMode(pinoBuzzer, OUTPUT); // Define o pino do buzzer como saída
}

void loop() {
  // O "for" agora passa exatamente pelas 25 notas da melodia
  for (int i = 0; i < 25; i++) {
    
    // Calcula o tempo da nota. 1000 milissegundos dividido pela duração
    int tempoNota = 1000 / duracaoNotas[i];
    
    // Toca a nota no pino selecionado
    tone(pinoBuzzer, melodia[i], tempoNota);

    // Cria uma pequena pausa entre as notas para a música não embolar
    int pausaEntreNotas = tempoNota * 1.30;
    delay(pausaEntreNotas);
    
    // Para o som da nota atual antes de tocar a próxima
    noTone(pinoBuzzer);
  }

  // Espera 5 segundos antes de tocar a música inteira de novo
  delay(5000); 
}
