#include <LiquidCrystal.h>
#include <Servo.h>
#define t1 5 // Example GPIO pins
#define t2 17
#define t3 25
#define t4 15
#define SERVO_PIN 23
#define g1 35
#define g2 2
#define g3 3
#define r1 32
#define r2 4
#define r3 2
LiquidCrystal lcd(12, 13, 14, 15, 16, 17); // Adjust based on your wiring
Servo servoMotor;
int distanceThreshold = 150;
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0, 0);
pinMode(g1, OUTPUT);
pinMode(g2, OUTPUT);
pinMode(g3, OUTPUT);
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
pinMode(r3, OUTPUT);
servoMotor.attach(SERVO_PIN);
}
long Distance(int triggerPin, int echoPin) {
pinMode(triggerPin, OUTPUT);
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
return pulseIn(echoPin, HIGH);
}
void LED(float distance, int greenLedPin, int redLedPin) {
if (distance >= distanceThreshold) {
digitalWrite(greenLedPin, HIGH);
digitalWrite(redLedPin, LOW);
} else {
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
}
}
void loop() {
float d1 = 0.01723 * Distance(t1, t1);
float d2 = 0.01723 * Distance(t2, t2);
float d3 = 0.01723 * Distance(t3, t3);
if (0.01723 * Distance(t4, t4) > 100) {
servoMotor.write(90);
} else {
servoMotor.write(0);
}
LED(d1, g1, r1);
LED(d2, g2, r2);
LED(d3, g3, r3);
LCDdisplay(d1, d2, d3);
delay(100);
}
void LCDdisplay(float d1, float d2, float d3) {
if (d1 > 100 && d2 > 100 && d3 > 100) {
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("All Slot");
lcd.setCursor(3, 1);
lcd.print(" Available");
delay(300);
} else if ((d1 > 100 && d2 > 100) || (d2 > 100 && d3 > 100) || (d3 > 100 && d1 > 100)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("2 Slots Free");
lcd.setCursor(0, 1);
if (d1 > 100 && d2 > 100)
lcd.print("Slot 1 & 2 Free");
else if (d1 > 100 && d3 > 100)
lcd.print("Slot 1 & 3 Free");
else
lcd.print("Slot 2 & 3 Free");
delay(300);
} else if (d1 < 100 && d2 < 100 && d3 < 100) {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("Parking");
lcd.setCursor(6, 1);
lcd.print("Full");
delay(300);
} else if ((d1 < 100 && d2 < 100) || (d2 < 100 && d3 < 100) || (d3 < 100 && d1 < 100)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1 Slot Free");
lcd.setCursor(0, 1);
if (d1 > 100)
lcd.print("Slot 1 is Free");
else if (d2 > 100)
lcd.print("Slot 2 is Free");
else
lcd.print("Slot 3 is Free");
delay(300);
}
}