#include <Servo.h>
#include <LiquidCrystal.h>
Servo myServo;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int trigPin1 = 9;
const int echoPin1 = 10;
const int trigPin2 = 7;
const int echoPin2 = 8;
const int trigPin3 = 6;
const int echoPin3 = A0;
const int redLED = A1;
const int greenLED = A2;
long duration1, distance1;
long duration2, distance2;
long duration3, distance3;
int maxCapacity = 3;
int currentCapacity = 0;
void setup() {
myServo.attach(13);
myServo.write(0);
lcd.begin(16, 2);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
lcd.print("Parking System");
delay(2000);
lcd.clear();
lcd.print("2347131");
delay(2000);
lcd.clear();
}
void loop() {
distance1 = readDistance(trigPin1, echoPin1);
distance2 = readDistance(trigPin2, echoPin2);
distance3 = readDistance(trigPin3, echoPin3);
if (distance1 < 20 && currentCapacity < maxCapacity) {
currentCapacity++;
myServo.write(90);
delay(2000);
myServo.write(0);
lcd.clear();
lcd.print("Car Entered");
delay(1000);
}
if (distance2 < 20 && currentCapacity > 0) {
currentCapacity--;
myServo.write(90);
delay(2000);
myServo.write(0);
lcd.clear();
lcd.print("Car Left");
delay(1000);
}
// Update LED status
if (currentCapacity == maxCapacity) {
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, LOW);
lcd.clear();
lcd.print("Parking Full");
} else {
digitalWrite(redLED, LOW);
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.print("Slots: ");
lcd.print(maxCapacity - currentCapacity);
}
delay(500);
}
long readDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
long distance = (duration / 2) / 29.1;
return distance;
}