#include <Servo.h>
#include <LiquidCrystal.h>
#define SERVO_PIN 9
#define IR_SENSOR_PIN1 A0
#define IR_SENSOR_PIN2 A1
#define IR_SENSOR_PIN3 A2
#define TRIGGER_PIN1 10
#define ECHO_PIN1 11
#define TRIGGER_PIN2 12
#define ECHO_PIN2 13
#define LCD_RS 7
#define LCD_EN 6
#define LCD_D4 5
#define LCD_D5 4
#define LCD_D6 3
#define LCD_D7 2
Servo parkingGate; // Créez un objet Servo pour contrôler le servomoteur
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
#define MAX_PARKING_SPOTS 3 // Nombre total de places de parking
void setup() {
parkingGate.attach(SERVO_PIN); // Attachez le servomoteur à la broche 9
lcd.begin(16, 2); // Initialisez l'écran LCD
pinMode(IR_SENSOR_PIN1, INPUT); // Configurez les broches des capteurs infrarouges en entrée
pinMode(IR_SENSOR_PIN2, INPUT);
pinMode(IR_SENSOR_PIN3, INPUT);
pinMode(TRIGGER_PIN1, OUTPUT); // Configurez les broches des capteurs ultrasoniques
pinMode(ECHO_PIN1, INPUT);
pinMode(TRIGGER_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
lcd.print("Parking: "); // Affichez le texte initial sur l'écran LCD
}
void loop() {
int distance1 = getDistance(TRIGGER_PIN1, ECHO_PIN1); // Mesurez la distance à l'aide du capteur ultrasonique 1
int distance2 = getDistance(TRIGGER_PIN2, ECHO_PIN2); // Mesurez la distance à l'aide du capteur ultrasonique 2
int car1 = digitalRead(IR_SENSOR_PIN1); // Lisez l'état du capteur infrarouge 1
int car2 = digitalRead(IR_SENSOR_PIN2); // Lisez l'état du capteur infrarouge 2
int car3 = digitalRead(IR_SENSOR_PIN3); // Lisez l'état du capteur infrarouge 3
int availableSpots = MAX_PARKING_SPOTS; // Initialisez le nombre de places de parking disponibles à sa valeur maximale
if (distance1 < 10 && distance2 > 10) {
openGate(); // Si le capteur ultrasonique 1 détecte un objet proche, ouvrez la porte
} else {
closeGate(); // Sinon, fermez la porte
}
if (car1) {
availableSpots--; // Si le capteur infrarouge 1 détecte une voiture, décrémentez le nombre de places disponibles
}
if (car2) {
availableSpots--; // Si le capteur infrarouge 2 détecte une voiture, décrémentez le nombre de places disponibles
}
if (car3) {
availableSpots--; // Si le capteur infrarouge 3 détecte une voiture, décrémentez le nombre de places disponibles
}
lcd.setCursor(0, 1); // Déplacez le curseur de l'écran LCD à la deuxième ligne
lcd.print("Places dispo: "); // Affichez le texte "Places dispo: "
lcd.print(availableSpots); // Affichez le nombre de places de parking disponibles
delay(1000); // Attendez 1 seconde
}
int getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
return pulseIn(echoPin, HIGH) / 58; // Mesurez la distance en centimètres à l'aide du capteur ultrasonique
}
void openGate() {
parkingGate.write(90); // Déplacez le servomoteur à l'angle pour ouvrir la porte
delay(1000); // Attendez 1 seconde
parkingGate.write(0); // Retournez le servomoteur à la position initiale pour fermer la porte
}
void closeGate() {
parkingGate.write(0); // Fermez la porte en ramenant le servomoteur à la position initiale
}