const int capteur = 3; // bouton ou capteur tactile
const int led = 2; // LED
const int buzzer = 4; // buzzer
int compteur = 0;
unsigned long startTime = 0;
bool alarmeActive = false;
unsigned long lastTouchTime = 0;
void setup() {
pinMode(capteur, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop() {
if (digitalRead(capteur) == LOW) {
delay(200);
compteur++;
lastTouchTime = millis();
if (compteur == 1) {
// 1er toucher : bip court
digitalWrite(led, HIGH);
tone(buzzer, 1000, 500);
delay(500);
digitalWrite(led, LOW);
}
else if (compteur == 2) {
// 2ème toucher : deux bips
for (int i = 0; i < 2; i++) {
digitalWrite(led, HIGH);
tone(buzzer, 1200, 400);
delay(500);
digitalWrite(led, LOW);
delay(300);
}
}
else if (compteur == 3) {
// 3ème toucher : sirène réaliste
digitalWrite(led, HIGH);
alarmeActive = true;
startTime = millis();
}
else if (compteur >= 4) {
// 4ème et plus : sirène réaliste (au lieu de son continu)
if (!alarmeActive) {
digitalWrite(led, HIGH);
alarmeActive = true;
startTime = millis();
}
}
}
// 🔊 Sirène réaliste (500 → 1500 Hz montée/descente)
if (alarmeActive) {
unsigned long elapsed = millis() - startTime;
if (elapsed < 20000) { // dure 20 secondes
int cycle = (elapsed / 10) % 200;
int freq;
if (cycle < 100) {
freq = 500 + cycle * 10; // montée
} else {
freq = 1500 - (cycle - 100) * 10; // descente
}
tone(buzzer, freq);
} else {
digitalWrite(led, LOW);
noTone(buzzer);
alarmeActive = false;
}
}
// 🔄 Reset automatique après 30 secondes sans toucher
if ((millis() - lastTouchTime >= 30000) && !alarmeActive) {
compteur = 0; // retour au départ
digitalWrite(led, LOW);
noTone(buzzer);
alarmeActive = false;
}
}