// Определения частот нот
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
const int buzzer = 8;
// Главная тема Spear of Justice (Undertale)
int melody[] = {
// --- Куплет 1 (Основной мотив) ---
NOTE_A4, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_A4, NOTE_C5, NOTE_D5, NOTE_E5,
NOTE_F5, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_E5,
NOTE_A4, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_A4, NOTE_C5, NOTE_D5, NOTE_E5,
NOTE_G5, NOTE_F5, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_B4, NOTE_A4, NOTE_G4,
// --- Куплет 2 (Повтор с повышением) ---
NOTE_A4, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_A4, NOTE_C5, NOTE_D5, NOTE_E5,
NOTE_F5, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_E5,
NOTE_A4, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_A4, NOTE_C5, NOTE_D5, NOTE_E5,
NOTE_G5, NOTE_F5, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_B4, NOTE_A4, NOTE_A4,
// --- Припев (Развитие темы / Эпик) ---
NOTE_F5, NOTE_F5, NOTE_E5, NOTE_D5, NOTE_E5, NOTE_E5, NOTE_D5, NOTE_C5,
NOTE_D5, NOTE_D5, NOTE_C5, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_C5,
NOTE_F5, NOTE_F5, NOTE_E5, NOTE_D5, NOTE_E5, NOTE_E5, NOTE_D5, NOTE_C5,
NOTE_D5, NOTE_C5, NOTE_B4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4
};
// Длительности (16 = шестнадцатая, 8 = восьмая, 4 = четверть)
int noteDurations[] = {
// Куплет 1
8, 8, 8, 8, 8, 8, 8, 8,
4, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8,
4, 8, 8, 8, 8, 8, 8, 8,
// Куплет 2
8, 8, 8, 8, 8, 8, 8, 8,
4, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8,
4, 8, 8, 8, 8, 8, 4, 8,
// Припев
8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 4, 8, 8, 4
};
void setup() {
pinMode(buzzer, OUTPUT);
}
void loop() {
int notesCount = sizeof(melody) / sizeof(melody[0]);
// Скорость исполнения (чем меньше число, тем быстрее играется)
int tempo = 1200;
for (int i = 0; i < notesCount; i++) {
int duration = tempo / noteDurations[i];
tone(buzzer, melody[i], duration);
// Короткая пауза между нотами для прерывистого (стаккато) звучания
int pauseBetweenNotes = duration * 1.15;
delay(pauseBetweenNotes);
noTone(buzzer);
}
delay(2000); // Пауза перед повтором трека
}