#include <LiquidCrystal.h>
#include <Servo.h>
// Initialize LCD with the correct pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Initialize Servo
Servo gateServo;
// Ultrasonic sensor pins
const int trigPin1 = 7;
const int echoPin1 = 6;
const int trigPin2 = 9;
const int echoPin2 = 8;
const int trigPin3 = A0;
const int echoPin3 = A1;
// LED pins
const int redLED = 13;
const int greenLED = 10;
// Variables
int parkedCars = 0;
const int maxCars = 3;
const int rollNo = 12345; // Replace with your roll number
void setup() {
// Initialize Serial Monitor for debugging
Serial.begin(9600);
// Initialize LCD
lcd.begin(16, 2);
lcd.clear();
// Initialize Servo
gateServo.attach(A2);
gateServo.write(0);
// Initialize Ultrasonic sensors
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
// Initialize LEDs
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
// Display roll number
lcd.setCursor(0, 0);
lcd.print("Roll No: ");
lcd.print(rollNo);
delay(2000);
lcd.clear();
}
void loop() {
int distance1 = getDistance(trigPin1, echoPin1);
int distance2 = getDistance(trigPin2, echoPin2);
int distance3 = getDistance(trigPin3, echoPin3);
// Print distances for debugging
Serial.print("Distance1: ");
Serial.print(distance1);
Serial.print(" cm, Distance2: ");
Serial.print(distance2);
Serial.print(" cm, Distance3: ");
Serial.println(distance3);
// Check for entering vehicle
if (distance1 < 10 && parkedCars < maxCars) {
parkedCars++;
openGate();
updateDisplay("Vehicle Entered", "Spaces: " + String(maxCars - parkedCars));
delay(2000);
}
// Check for leaving vehicle
if (distance2 < 10 && parkedCars > 0) {
parkedCars--;
openGate();
updateDisplay("Vehicle Left", "Spaces: " + String(maxCars - parkedCars));
delay(2000);
}
// Update parking status
if (parkedCars >= maxCars) {
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, LOW);
updateDisplay("Parking Full", "Spaces: 0");
} else {
digitalWrite(redLED, LOW);
digitalWrite(greenLED, HIGH);
updateDisplay("Spaces Available", "Spaces: " + String(maxCars - parkedCars));
}
delay(100);
}
int getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
return distance;
}
void openGate() {
gateServo.write(90);
delay(1000);
gateServo.write(0);
}
void updateDisplay(String line1, String line2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
}