// Melody (frequencies in Hz, mapped as per your original NOTE_XX constants)
// Rests are represented as 0
// NOTE_ frequencies, as per the standard pitches.h:
// NOTE_E4 = 329.63
// NOTE_F4 = 349.23
// NOTE_G4 = 392.00
// NOTE_A4 = 440.00
// NOTE_AS4 = 466.16
// NOTE_B4 = 493.88
// NOTE_C5 = 523.25
// NOTE_D5 = 587.33
// NOTE_E5 = 659.25
// NOTE_F5 = 698.46
int melody[] = {
349.23, 349.23, 349.23, 349.23, 698.46, 698.46, 698.46, 698.46, // F4 f4 F5 f5
659.25, 659.25, 523.25, 587.33, 659.25, 659.25, 698.46, 698.46, // E5 e5 C5 D5 E5 e5 F5 f5
466.16, 466.16, 466.16, 466.16, 587.33, 587.33, 587.33, 587.33, // AS4 as4 D5 d5
523.25, 523.25, 523.25, 523.25, 523.25, 523.25, 523.25, 523.25, // C5 c5
587.33, 587.33, 587.33, 587.33, 466.16, 466.16, 466.16, 466.16, // D5 d5 AS4 as4
440.00, 440.00, 349.23, 392.00, 440.00, 440.00, 493.88, 493.88, // A4 a4 F4 f4 G4 g4 A4 a4 B4 b4
392.00, 329.63, 349.23, 392.00, 440.00, 440.00, // G4 E4 F4 G4 A4 A4
349.23, 349.23, 349.23, 349.23, 349.23, 349.23, 523.25, 523.25, // F4 F4 F4 F4 F4 F4 C5 C5
440.00, 523.25, 440.00, 523.25, 440.00, 523.25, 440.00, 523.25, // A4 C5 A4 C5 A4 C5 A4 C5
466.16, 523.25, 466.16, 523.25, 466.16, 523.25, 466.16, 523.25, // AS4 C5 AS4 C5 AS4 C5 AS4 C5
587.33, 587.33, 587.33, 587.33, 587.33, 587.33, 587.33, 587.33, // D5 D5 D5 D5 D5 D5 D5 D5
587.33, 587.33, 587.33, 587.33, 587.33, 587.33, 523.25, 523.25, // D5 D5 D5 D5 D5 D5 C5 C5
440.00, 523.25, 440.00, 523.25, 440.00, 523.25, 440.00, 523.25, // A4 C5 A4 C5 A4 C5 A4 C5
493.88, 587.33, 493.88, 587.33, 493.88, 587.33, 493.88, 587.33, // B4 D5 B4 D5 B4 D5 B4 D5
659.25, 659.25, 659.25, 659.25, 659.25, 659.25, 659.25, 659.25, // E5 E5 E5 E5 E5 E5 E5 E5
392.00, 392.00, 392.00, 392.00, 466.16, 466.16, 466.16, 466.16, // G4 G4 G4 G4 AS4 AS4 AS4 AS4
349.23, 349.23, 349.23, 349.23, 698.46, 698.46, 698.46, 698.46, // F4 F4 F4 F4 F5 F5 F5 F5
659.25, 659.25, 523.25, 587.33, 659.25, 659.25, 698.46, 698.46, // E5 E5 C5 D5 E5 E5 F5 F5
466.16, 466.16, 466.16, 466.16, 587.33, 587.33, 587.33, 587.33, // AS4 AS4 AS4 AS4 D5 D5 D5 D5
523.25, 523.25, 523.25, 523.25, 523.25, 523.25, 523.25, 523.25, // C5 C5 C5 C5 C5 C5 C5 C5
587.33, 587.33, 587.33, 587.33, 466.16, 466.16, 466.16, 466.16, // D5 D5 D5 D5 AS4 AS4 AS4 AS4
440.00, 440.00, 349.23, 392.00, 440.00, 440.00, 493.88, 493.88, // A4 A4 F4 G4 A4 A4 B4 B4
392.00, 329.63, 349.23, 392.00, 440.00, 440.00, // G4 E4 F4 G4 A4 A4
349.23, 349.23, 349.23, 349.23, 349.23, 349.23, 523.25, 523.25, // F4 F4 F4 F4 F4 F4 C5 C5
440.00, 523.25, 440.00, 523.25, 440.00, 523.25, 440.00, 523.25, // A4 C5 A4 C5 A4 C5 A4 C5
466.16, 523.25, 466.16, 523.25, 466.16, 523.25, 0, 0, // AS4 C5 AS4 C5 AS4 C5 rest rest
493.88, 523.25, 587.33, 659.25, 698.46, 698.46, 698.46, 698.46, // B4 C5 D5 E5 F5 F5 F5 F5
};
// Durations: 4 = quarter note, 8 = eighth note, etc. (based on L:1/8 and M:4/4)
// For simplicity, let's map 8 -> eighth, 4 -> quarter, 2 -> half, etc.
int noteDurations[] = {
4,4,4,4,4,4,4,4, // F4 f4
2,2,2,2,2,2,2,2, // Am e2 cd e2 f2
4,4,4,4,4,4,4,4, // Bb F4 d4
8,8,8,8,8,8,8,8, // F c8
4,4,4,4,4,4,4,4, // Bb D4 Bbm B4
2,2,2,2,2,2,2,2, // F A2 FG A2 Gm B2
2,2,2,2,2,2, // G2 EF C7 G2 F A2
8,8,8,8,8,8,2,2, // F8 or F6 c2
2,2,2,2,2,2,2,2, // F AcAc AcAc
2,2,2,2,2,2,2,2, // Bb BcBc Bbm BcBc
4,4,4,4,4,4,4,4, // Dm d4 d4
2,2,2,2,2,2,2,2, // d6 F c2
2,2,2,2,2,2,2,2, // AcAc AcAc
2,2,2,2,2,2,2,2, // E7 =BdBd BdBd
4,4,4,4,4,4,4,4, // Am e4 e4
4,4,4,4,4,4,4,4, // Gm g4 Bb d4
4,4,4,4,4,4,4,4, // F4 f4
2,2,2,2,2,2,2,2, // Am e2 cd e2 f2
4,4,4,4,4,4,4,4, // Bb F4 d4
8,8,8,8,8,8,8,8, // F c8
4,4,4,4,4,4,4,4, // Bb D4 Bbm B4
2,2,2,2,2,2,2,2, // F A2 FG A2 Gm B2
2,2,2,2,2,2, // G2 EF C7 G2 F A2
8,8,8,8,8,8,2,2, // F6 c2
2,2,2,2,2,2,2,2, // AcAc AcAc
2,2,2,2,2,2,2,2, // Bb BcBc Bbm z4 (rest)
2,2,2,2,4,4,4,4, // Gm B2 C c2 Gm d2 C e2 F f8
};
const int notes = sizeof(melody) / sizeof(melody[0]);
const int buzzerPin = 8; // Change as needed
void setup() {
Serial.begin(9600);
Serial.println("");
delay(3000);
}
int thisNote=0;
void loop() {
int noteDuration = 750 / noteDurations[thisNote];
if(melody[thisNote]>0) {
tone(buzzerPin, melody[thisNote], noteDuration);
} else {
noTone(buzzerPin);
}
Serial.print(0);
Serial.print(",");
Serial.print(800);
Serial.print(",");
Serial.print(melody[thisNote]);
//Serial.print(",");
//Serial.print(noteDuration);
Serial.println("");
delay(noteDuration * 1.1); // Add a slight pause between notes
thisNote=(thisNote+1) % notes;
}