#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#define LEFT_SERVO_PIN 11
#define RIGHT_SERVO_PIN 12
#define PIR_SENSOR_PIN 2
Servo leftServo;
Servo rightServo;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Address for the LCD1602
const int numSlots = 2; // Number of parking slots
int freeSlots = numSlots;
int filledSlots = 0;
const int trigPins[numSlots] = {3, 5}; // Ultrasonic sensor trigger pins
const int echoPins[numSlots] = {4, 6}; // Ultrasonic sensor echo pins
long duration;
int distance;
void setup() {
leftServo.attach(LEFT_SERVO_PIN);
rightServo.attach(RIGHT_SERVO_PIN);
pinMode(PIR_SENSOR_PIN, INPUT);
Wire.begin(); // Initialize the I2C library
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on backlight
lcd.print("Smart Parking"); // Display Smart Parking System
lcd.setCursor(0, 1); // Move cursor to the second line
lcd.print("System");
delay(2000); // Display for 2 seconds
lcd.clear(); // Clear the display
}
void loop() {
for (int i = 0; i < numSlots; i++) {
distance = getDistance(trigPins[i], echoPins[i]);
if (distance < 10) {
if (filledSlots < numSlots) {
filledSlots++;
freeSlots--;
}
}
}
int motionDetected = digitalRead(PIR_SENSOR_PIN);
if (motionDetected == HIGH) {
lcd.clear();
lcd.print("Human detected");
lcd.setCursor(0, 1);
lcd.print("Drive carefully");
delay(2000); // Display message for 2 seconds
} else {
lcd.clear();
lcd.print("Free: ");
lcd.print(freeSlots);
lcd.print(" Filled: ");
lcd.print(filledSlots);
}
}
int getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
return distance;
}