#include <ESP32Servo.h>
#include <LiquidCrystal.h>
// Pin definitions
const int trigPin = 9; // Pin connecté à TRIG du capteur ultrasonique
const int echoPin = 10; // Pin connecté à ECHO du capteur ultrasonique
const int ledPin = 7; // Pin connecté à la LED rouge
const int buttonUpPin = 2; // Pin connecté au bouton pour monter la barrière
const int buttonDownPin = 3; // Pin connecté au bouton pour baisser la barrière
const int sensorThreshold = 20; // Seuil de détection de la distance en centimètres
const int maxPassages = 100; // Nombre maximal de passages avant réinitialisation du compteur
// Variables globales
Servo barrierServo;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Broches RS, E, D4, D5, D6, D7
int passageCount = 0;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buttonUpPin, INPUT_PULLUP);
pinMode(buttonDownPin, INPUT_PULLUP);
barrierServo.attach(servoPin);
barrierServo.write(90); // Position initiale de la barrière
lcd.begin(16, 2);
lcd.print("Passages: 0");
}
void loop() {
// Code de détection de la distance et contrôle de la barrière...
// Vérification des boutons pour contrôler la barrière manuellement
if (digitalRead(buttonUpPin) == LOW) {
barrierServo.write(0); // Abaisser la barrière
digitalWrite(ledPin, HIGH); // Allumer la LED rouge
delay(3000); // Laisser le temps aux véhicules de passer
barrierServo.write(90); // Lever la barrière
digitalWrite(ledPin, LOW); // Éteindre la LED rouge
passageCount++;
updateLCD();
delay(500); // Délai pour éviter les rebonds
}
if (digitalRead(buttonDownPin) == LOW) {
barrierServo.write(180); // Abaisser la barrière complètement
delay(3000); // Laisser le temps aux véhicules de passer
barrierServo.write(90); // Lever la barrière
passageCount++;
updateLCD();
delay(500); // Délai pour éviter les rebonds
}
}
void updateLCD() {
lcd.setCursor(9, 0);
lcd.print(" "); // Effacer l'ancien compteur
lcd.setCursor(9, 0);
lcd.print(passageCount);
}