// -------------------------------------------------
// Copyright (c) 2022 HiBit <https://www.hibit.dev>
// -------------------------------------------------
#include "pitches.h"
#define BUZZER_PIN 27
int melody[] = {
NOTE_E5, NOTE_E5, REST, NOTE_E5, REST, NOTE_C5, NOTE_E5,
NOTE_G5, REST, NOTE_G4, REST,
NOTE_C5, NOTE_G4, REST, NOTE_E4,
NOTE_A4, NOTE_B4, NOTE_AS4, NOTE_A4,
NOTE_G4, NOTE_E5, NOTE_G5, NOTE_A5, NOTE_F5, NOTE_G5,
REST, NOTE_E5,NOTE_C5, NOTE_D5, NOTE_B4,
NOTE_C5, NOTE_G4, REST, NOTE_E4,
NOTE_A4, NOTE_B4, NOTE_AS4, NOTE_A4,
NOTE_G4, NOTE_E5, NOTE_G5, NOTE_A5, NOTE_F5, NOTE_G5,
REST, NOTE_E5,NOTE_C5, NOTE_D5, NOTE_B4,
REST, NOTE_G5, NOTE_FS5, NOTE_F5, NOTE_DS5, NOTE_E5,
REST, NOTE_GS4, NOTE_A4, NOTE_C4, REST, NOTE_A4, NOTE_C5, NOTE_D5,
REST, NOTE_DS5, REST, NOTE_D5,
NOTE_C5, REST,
REST, NOTE_G5, NOTE_FS5, NOTE_F5, NOTE_DS5, NOTE_E5,
REST, NOTE_GS4, NOTE_A4, NOTE_C4, REST, NOTE_A4, NOTE_C5, NOTE_D5,
REST, NOTE_DS5, REST, NOTE_D5,
NOTE_C5, REST,
NOTE_C5, NOTE_C5, NOTE_C5, REST, NOTE_C5, NOTE_D5,
NOTE_E5, NOTE_C5, NOTE_A4, NOTE_G4,
NOTE_C5, NOTE_C5, NOTE_C5, REST, NOTE_C5, NOTE_D5, NOTE_E5,
REST,
NOTE_C5, NOTE_C5, NOTE_C5, REST, NOTE_C5, NOTE_D5,
NOTE_E5, NOTE_C5, NOTE_A4, NOTE_G4,
NOTE_E5, NOTE_E5, REST, NOTE_E5, REST, NOTE_C5, NOTE_E5,
NOTE_G5, REST, NOTE_G4, REST,
NOTE_C5, NOTE_G4, REST, NOTE_E4,
NOTE_A4, NOTE_B4, NOTE_AS4, NOTE_A4,
NOTE_G4, NOTE_E5, NOTE_G5, NOTE_A5, NOTE_F5, NOTE_G5,
REST, NOTE_E5, NOTE_C5, NOTE_D5, NOTE_B4,
NOTE_C5, NOTE_G4, REST, NOTE_E4,
NOTE_A4, NOTE_B4, NOTE_AS4, NOTE_A4,
NOTE_G4, NOTE_E5, NOTE_G5, NOTE_A5, NOTE_F5, NOTE_G5,
REST, NOTE_E5, NOTE_C5, NOTE_D5, NOTE_B4,
NOTE_E5, NOTE_C5, NOTE_G4, REST, NOTE_GS4,
NOTE_A4, NOTE_F5, NOTE_F5, NOTE_A4,
NOTE_D5, NOTE_A5, NOTE_A5, NOTE_A5, NOTE_G5, NOTE_F5,
NOTE_E5, NOTE_C5, NOTE_A4, NOTE_G4,
NOTE_E5, NOTE_C5, NOTE_G4, REST, NOTE_GS4,
NOTE_A4, NOTE_F5, NOTE_F5, NOTE_A4,
NOTE_B4, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_D5,
NOTE_C5, NOTE_E4, NOTE_E4, NOTE_C4,
NOTE_E5, NOTE_C5, NOTE_G4, REST, NOTE_GS4,
NOTE_A4, NOTE_F5, NOTE_F5, NOTE_A4,
NOTE_D5, NOTE_A5, NOTE_A5, NOTE_A5, NOTE_G5, NOTE_F5,
NOTE_E5, NOTE_C5, NOTE_A4, NOTE_G4,
NOTE_E5, NOTE_C5, NOTE_G4, REST, NOTE_GS4,
NOTE_A4, NOTE_F5, NOTE_F5, NOTE_A4,
NOTE_B4, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_D5,
NOTE_C5, NOTE_E4, NOTE_E4, NOTE_C4,
NOTE_C5, NOTE_C5, NOTE_C5, REST, NOTE_C5, NOTE_D5, NOTE_E5,
REST,
NOTE_C5, NOTE_C5, NOTE_C5, REST, NOTE_C5, NOTE_D5,
NOTE_E5, NOTE_C5, NOTE_A4, NOTE_G4,
NOTE_E5, NOTE_E5, REST, NOTE_E5, REST, NOTE_C5, NOTE_E5,
NOTE_G5, REST, NOTE_G4, REST,
NOTE_E5, NOTE_C5, NOTE_G4, REST, NOTE_GS4,
NOTE_A4, NOTE_F5, NOTE_F5, NOTE_A4,
NOTE_D5, NOTE_A5, NOTE_A5, NOTE_A5, NOTE_G5, NOTE_F5,
NOTE_E5, NOTE_C5, NOTE_A4, NOTE_G4,
NOTE_E5, NOTE_C5, NOTE_G4, REST, NOTE_GS4,
NOTE_A4, NOTE_F5, NOTE_F5, NOTE_A4,
NOTE_B4, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_D5,
NOTE_C5, NOTE_E4, NOTE_E4, NOTE_C4,
// Game over sound
NOTE_C5, NOTE_G4, NOTE_E4,
NOTE_A4, NOTE_B4, NOTE_A4, NOTE_GS4, NOTE_AS4, NOTE_GS4,
NOTE_G4, NOTE_D4, NOTE_E4
};
int durations[] = {
8, 8, 8, 8, 8, 8, 8,
4, 4, 8, 4,
4, 8, 4, 4,
4, 4, 8, 4,
8, 8, 8, 4, 8, 8,
8, 4,8, 8, 4,
4, 8, 4, 4,
4, 4, 8, 4,
8, 8, 8, 4, 8, 8,
8, 4,8, 8, 4,
4, 8, 8, 8, 4, 8,
8, 8, 8, 8, 8, 8, 8, 8,
4, 4, 8, 4,
2, 2,
4, 8, 8, 8, 4, 8,
8, 8, 8, 8, 8, 8, 8, 8,
4, 4, 8, 4,
2, 2,
8, 4, 8, 8, 8, 4,
8, 4, 8, 2,
8, 4, 8, 8, 8, 8, 8,
1,
8, 4, 8, 8, 8, 4,
8, 4, 8, 2,
8, 8, 8, 8, 8, 8, 4,
4, 4, 4, 4,
4, 8, 4, 4,
4, 4, 8, 4,
8, 8, 8, 4, 8, 8,
8, 4, 8, 8, 4,
4, 8, 4, 4,
4, 4, 8, 4,
8, 8, 8, 4, 8, 8,
8, 4, 8, 8, 4,
8, 4, 8, 4, 4,
8, 4, 8, 2,
8, 8, 8, 8, 8, 8,
8, 4, 8, 2,
8, 4, 8, 4, 4,
8, 4, 8, 2,
8, 4, 8, 8, 8, 8,
8, 4, 8, 2,
8, 4, 8, 4, 4,
8, 4, 8, 2,
8, 8, 8, 8, 8, 8,
8, 4, 8, 2,
8, 4, 8, 4, 4,
8, 4, 8, 2,
8, 4, 8, 8, 8, 8,
8, 4, 8, 2,
8, 4, 8, 8, 8, 8, 8,
1,
8, 4, 8, 8, 8, 4,
8, 4, 8, 2,
8, 8, 8, 8, 8, 8, 4,
4, 4, 4, 4,
8, 4, 8, 4, 4,
8, 4, 8, 2,
8, 8, 8, 8, 8, 8,
8, 4, 8, 2,
8, 4, 8, 4, 4,
8, 4, 8, 2,
8, 4, 8, 8, 8, 8,
8, 4, 8, 2,
//game over sound
4, 4, 4,
8, 8, 8, 8, 8, 8,
8, 8, 2
};
void setup()
{
Serial.begin(115200);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop()
{
int size = sizeof(durations) / sizeof(int);
for (int note = 0; note < size; note++) {
//to calculate the note duration, take one second divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int duration = 1000 / durations[note];
tone(BUZZER_PIN, melody[note], duration);
Serial.print("note:");
Serial.println(melody[note]);
//to distinguish the notes, set a minimum time between them.
//the note's duration + 30% seems to work well:
//int pauseBetweenNotes = duration * 1.30;
//delay(pauseBetweenNotes);
//stop the tone playing:
noTone(BUZZER_PIN);
}
}