#include <Servo.h>
// IR sensors (LOW = car detected, HIGH = free)
#define IR1 2
#define IR2 3
#define IR3 4
#define IR4 5
// Slot indicator LEDs (RED = occupied)
#define LED1 6
#define LED2 7
#define LED3 8
#define LED4 9
// Status LEDs
#define LED_AVAIL 11 // Green = slots free
#define LED_FULL 12 // Red = parking full
// Servo (entry gate)
#define GATE_PIN 10
Servo gate;
const int irPins[] = {IR1, IR2, IR3, IR4};
const int ledPins[] = {LED1, LED2, LED3, LED4};
const int TOTAL_SLOTS = 4;
bool lastState[4] = {false, false, false, false};
void setup() {
Serial.begin(9600);
for (int i = 0; i < 4; i++) {
pinMode(irPins[i], INPUT);
pinMode(ledPins[i], OUTPUT);
}
pinMode(LED_AVAIL, OUTPUT);
pinMode(LED_FULL, OUTPUT);
gate.attach(GATE_PIN);
gate.write(0); // gate closed
Serial.println("=================================");
Serial.println(" Smart Parking System");
Serial.println(" 4-Slot IR Sensor | Arduino");
Serial.println("=================================\n");
}
void updateDisplay(int occupied) {
int free = TOTAL_SLOTS - occupied;
if (free > 0) {
digitalWrite(LED_AVAIL, HIGH);
digitalWrite(LED_FULL, LOW);
gate.write(90); // open gate
} else {
digitalWrite(LED_AVAIL, LOW);
digitalWrite(LED_FULL, HIGH);
gate.write(0); // close gate
}
}
void loop() {
int occupied = 0;
bool changed = false;
for (int i = 0; i < 4; i++) {
// IR: LOW = object detected = occupied
bool carPresent = (digitalRead(irPins[i]) == LOW);
digitalWrite(ledPins[i], carPresent ? HIGH : LOW);
if (carPresent != lastState[i]) {
changed = true;
lastState[i] = carPresent;
}
if (carPresent) occupied++;
}
updateDisplay(occupied);
if (changed) {
Serial.println("──── Parking Status ────");
for (int i = 0; i < 4; i++) {
Serial.print(" Slot "); Serial.print(i + 1);
Serial.println(lastState[i] ? " → OCCUPIED 🚗" : " → FREE ✅");
}
Serial.print(" Occupied: "); Serial.print(occupied);
Serial.print(" / "); Serial.println(TOTAL_SLOTS);
Serial.print(" Available: "); Serial.println(TOTAL_SLOTS - occupied);
Serial.println(occupied == TOTAL_SLOTS ? " ⚠️ PARKING FULL — Gate CLOSED" : " ✅ Slots Available — Gate OPEN");
Serial.println("────────────────────────\n");
}
delay(300);
}