// Détecteur de Passage
const int CAPTEUR = PC14; // Bouton sur PC1
const int LED_VERTE = PA6; // LED verte sur PA6
const int LED_ROUGE = PA7; // LED rouge sur PA7
int compteur_passages = 0;
unsigned long tempsAppui = 0;
bool dernierEtat = HIGH;
void setup() {
pinMode(CAPTEUR, INPUT_PULLUP);
pinMode(LED_VERTE, OUTPUT);
pinMode(LED_ROUGE, OUTPUT);
}
void loop() {
bool etat = digitalRead(CAPTEUR);
// 1. Détection passage (front descendant)
if (etat == LOW && dernierEtat == HIGH) {
compteur_passages++;
delay(50); // Anti-rebonds
}
// 2. Reset si appui long (3 secondes)
if (etat == LOW) {
if (tempsAppui == 0) {
tempsAppui = millis(); // Début de l'appui
}
// Vérifier si appui > 3 secondes
if (millis() - tempsAppui > 3000) {
compteur_passages = 0; // Reset du compteur
tempsAppui = 0; // Reset du timer
// Éteindre les LEDs pendant reset
digitalWrite(LED_VERTE, LOW);
digitalWrite(LED_ROUGE, LOW);
delay(500); // Feedback visuel
}
} else {
tempsAppui = 0; // Bouton relâché
}
// 3. Affichage selon compteur
if (compteur_passages < 5) {
// Moins de 5 passages : LED verte allumée
digitalWrite(LED_VERTE, HIGH);
digitalWrite(LED_ROUGE, LOW);
} else {
// 5 passages ou plus : LED rouge clignote (alarme)
digitalWrite(LED_VERTE, LOW);
// Clignotement 500ms ON, 500ms OFF
digitalWrite(LED_ROUGE, (millis() / 500) % 2);
}
dernierEtat = etat;
}