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


const int buzzerPin = 8;

void setup() {
  pinMode(buzzerPin, OUTPUT);
}

// Вспомогательная функция для плавного слайда частоты (для эффекта взрыва)
void toneSlide(int startFreq, int endFreq, int durationMs) {
  int steps = 50;
  int delayPerStep = durationMs / steps;
  for (int i = 0; i <= steps; i++) {
    int currentFreq = map(i, 0, steps, startFreq, endFreq);
    tone(buzzerPin, currentFreq, delayPerStep);
    delay(delayPerStep);
  }
  noTone(buzzerPin);
}

void loop() {
  // --- 1. ТАЙМЕР БОМБЫ (40 секунд до детонации) ---
  int totalTimeMs = 40000; // 40 секунд
  unsigned long startTime = millis();
  
  while (millis() - startTime < totalTimeMs) {
    float progress = (float)(millis() - startTime) / totalTimeMs; // от 0.0 до 1.0
    
    // Пауза между пиками уменьшается с 1000 мс до 40 мс
    int currentDelay = map(progress * 100, 0, 100, 1000, 40);
    
    // Длительность самóго писка тоже немного сжимается
    int beepDuration = map(progress * 100, 0, 100, 70, 25);
    
    // Частота тона возрастает с 1800 Гц до 2800 Гц (звук становится выше и напряженнее)
    int frequency = map(progress * 100, 0, 100, 1800, 2800);
    
    tone(buzzerPin, frequency, beepDuration);
    delay(currentDelay);
  }

  // --- 2. ВЗРЫВ ("TERRORISTS WIN") ---
  // Финальный овердрайв прямо в секунду 0.0
  tone(buzzerPin, 3200, 150);
  delay(150);

  // Имитация баса/взрыва: слайд от 600 Гц до 60 Гц
  toneSlide(600, 60, 800);
  
  // Дополнительный остаточный гул
  tone(buzzerPin, 80, 500);
  delay(500);
  noTone(buzzerPin);

  delay(4000); // Пауза перед звуком обезвреживания

  // --- 3. ПАСХАЛКА: Звук успеха дефьюза ("Bomb has been defused") ---
  tone(buzzerPin, 1046, 100); // C6
  delay(120);
  tone(buzzerPin, 1318, 100); // E6
  delay(120);
  tone(buzzerPin, 1568, 150); // G6
  delay(200);
  tone(buzzerPin, 2093, 300); // C7
  delay(350);
  noTone(buzzerPin);

  // Пауза 8 секунд перед следующим раундом
  delay(8000);
}