Загрузка данных


#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); // Пауза перед повтором
}