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


// Определения частот нот
#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); // Пауза перед повтором трека
}