#include <LiquidCrystal.h>
#include <Servo.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
Servo gate;
int entryIR = 2;
int exitIR = 3;
int ledPin = 6;
int buzzerPin = A0;
int totalSlots = 5;
int availableSlots = 5;
void setup() {
lcd.begin(16, 2);
gate.attach(A1);
gate.write(0);
pinMode(entryIR, INPUT);
pinMode(exitIR, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
lcd.print("ProxiPark Ready");
delay(1000);
}
void loop() {
int entryVal = digitalRead(entryIR);
int exitVal = digitalRead(exitIR);
lcd.clear();
// Vehicle Entry
if (entryVal == LOW && availableSlots > 0) {
gate.write(90);
availableSlots = availableSlots - 1;
delay(1000);
gate.write(0);
}
// Vehicle Exit
if (exitVal == LOW && availableSlots < totalSlots) {
availableSlots = availableSlots + 1;
delay(1000);
}
// Status Display
if (availableSlots == 0) {
lcd.print("PARKING FULL");
// LED + Buzzer Blink
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
delay(200);
} else {
lcd.print("Slots Free:");
lcd.setCursor(0, 1);
lcd.print(availableSlots);
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
delay(500);
}
}