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);
}