#define NOTE_N 0
#define NOTE_A5 880
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
const int buzzerPin = 8;
// Скорость мелодии (Ударов в минуту / BPM).
// Если кажется слишком быстрым/медленным — просто измените это число:
int bpm = 130;
// Мелодия (Spear of Justice)
int melody[] = {
// --- Запев / Вступление ---
NOTE_A5, NOTE_C6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_N,
NOTE_A5, NOTE_C6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_N,
NOTE_F6, NOTE_E6, NOTE_D6, NOTE_C6, NOTE_B5, NOTE_C6, NOTE_D6, NOTE_E6,
NOTE_A5, NOTE_C6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_N,
NOTE_A5, NOTE_C6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_N,
NOTE_G6, NOTE_F6, NOTE_E6, NOTE_D6, NOTE_C6, NOTE_B5, NOTE_A5, NOTE_N,
// --- Основная тема ---
NOTE_A5, NOTE_A5, NOTE_C6, NOTE_D6, NOTE_E6, NOTE_E6, NOTE_F6, NOTE_E6,
NOTE_D6, NOTE_C6, NOTE_B5, NOTE_C6, NOTE_D6, NOTE_E6, NOTE_E6, NOTE_N,
NOTE_A5, NOTE_A5, NOTE_C6, NOTE_D6, NOTE_E6, NOTE_E6, NOTE_G6, NOTE_F6,
NOTE_E6, NOTE_D6, NOTE_C6, NOTE_B5, NOTE_A5, NOTE_A5, NOTE_A5, NOTE_N
};
// Длительности (16 = шестнадцатая, 8 = восьмая, 4 = четвертная)
int noteDurations[] = {
16, 16, 16, 16, 8, 16,
16, 16, 16, 16, 8, 16,
16, 16, 16, 16, 16, 16, 16, 8,
16, 16, 16, 16, 8, 16,
16, 16, 16, 16, 8, 16,
16, 16, 16, 16, 16, 16, 8, 16,
16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 8, 16,
16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 8, 16
};
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
int size = sizeof(melody) / sizeof(melody[0]);
// Длительность одной целой ноты в миллисекундах на основе BPM
long wholenote = (60000L * 4) / bpm;
for (int i = 0; i < size; i++) {
int duration = wholenote / noteDurations[i];
if (melody[i] == NOTE_N) {
noTone(buzzerPin);
delay(duration);
} else {
tone(buzzerPin, melody[i], duration);
// Звучание 80% времени ноты, 20% пауза для чёткого разделения звуков
delay(duration * 0.80);
noTone(buzzerPin);
delay(duration * 0.20);
}
}
delay(2000); // Пауза перед повтором
}