#include <NewPing.h>
#define RED_PIN 15 // Red pin of the RGB LED
#define GREEN_PIN 2 // Green pin of the RGB LED
#define BLUE_PIN 4 // Blue pin of the RGB LED
NewPing sonar(12, 14, 400);
const int pirPin = 34;
const int reserveButton = 35;
enum ParkingState {
OCCUPIED,
AVAILABLE,
RESERVED
};
ParkingState parkingState = AVAILABLE;
void setup() {
Serial.begin(115200);
pinMode(pirPin, INPUT);
pinMode(reserveButton, INPUT_PULLUP);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
digitalWrite(RED_PIN, 0);
digitalWrite(GREEN_PIN, 0);
digitalWrite(BLUE_PIN, 0);
}
void loop() {
int PIR = digitalRead(pirPin);
int reserveButtonState = digitalRead(reserveButton);
int DIS = sonar.ping_cm();
switch (parkingState) {
case OCCUPIED:
if (PIR == HIGH && DIS > 100) {
Serial.println("Parking Slot is AVAILABLE");
setColor(0, 255, 0); // Green
parkingState = AVAILABLE;
}
break;
case AVAILABLE:
if (reserveButtonState == HIGH) {
Serial.println("Parking Slot is RESERVED");
setColor(255, 255, 0); // Yellow
parkingState = RESERVED;
}
break;
case RESERVED:
if (PIR == HIGH && DIS <= 100) {
Serial.println("Parking Slot is OCCUPIED");
setColor(255, 0, 0); // Red
parkingState = OCCUPIED;
}
break;
}
delay(250);
}
// Function to set RGB LED color
void setColor(int red, int green, int blue) {
digitalWrite(RED_PIN, red);
digitalWrite(GREEN_PIN, green);
digitalWrite(BLUE_PIN, blue);
}