int melodyPin = 2;
#define LED_RED 13
#define LED_GREEN 11
#define LED_BLUE 10
// Definição das notas diretamente no código
#define NOTE_E7 2637
#define NOTE_C7 2093
#define NOTE_G7 3136
// Adicione outras notas conforme necessário...
// Definição da estrutura para armazenar as notas, durações e estados dos LEDs
typedef struct {
int pitch;
int duration;
int ledState[3]; // Array para armazenar os estados dos LEDs: {LED_RED, LED_GREEN, LED_BLUE}
} Note;
// Melodia do Mario Bros
Note melody[] = {
{NOTE_E7, 12, {HIGH, LOW, LOW}},
{NOTE_E7, 12, {LOW, HIGH, LOW}},
{NOTE_E7, 12, {HIGH, HIGH, LOW}},
{NOTE_C7, 12, {LOW, LOW, HIGH}},
{NOTE_E7, 12, {HIGH, LOW, HIGH}},
{NOTE_G7, 12, {LOW, HIGH, HIGH}},
// Continue com as notas da melodia...
};
int melodyLength = sizeof(melody) / sizeof(melody[0]);
void setup() {
pinMode(melodyPin, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
}
void loop() {
for (int i = 0; i < melodyLength; i++) {
// Toca a nota
tone(melodyPin, melody[i].pitch, melody[i].duration * 100);
// Acende os LEDs conforme a nota
digitalWrite(LED_RED, melody[i].ledState[0]);
digitalWrite(LED_GREEN, melody[i].ledState[1]);
digitalWrite(LED_BLUE, melody[i].ledState[2]);
// Pausa entre as notas
delay(melody[i].duration * 100);
// Desliga os LEDs
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_BLUE, LOW);
}
// Pequena pausa antes de repetir a melodia
delay(1000);
}