#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// LCD address and size
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin definitions
const int buttonPin = 2;
const int greenLED = 8;
const int redLED = 9;
// Occupancy status
bool occupied = false;
// Button variables
bool lastButtonState = HIGH;
bool currentButtonState;
void setup() {
// Initialize LCD
lcd.init();
lcd.backlight();
// Pin modes
pinMode(buttonPin, INPUT_PULLUP);
pinMode(greenLED, OUTPUT);
pinMode(redLED, OUTPUT);
// Initial status
showStatus();
}
void loop() {
currentButtonState = digitalRead(buttonPin);
// Detect button press
if (lastButtonState == HIGH && currentButtonState == LOW) {
// Change occupancy status
occupied = !occupied;
// Update LCD and LEDs
showStatus();
// Small debounce delay
delay(300);
}
lastButtonState = currentButtonState;
}
// Function to display occupancy status
void showStatus() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ROOM STATUS:");
if (occupied == true) {
lcd.setCursor(0, 1);
lcd.print("OCCUPIED");
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, LOW);
}
else {
lcd.setCursor(0, 1);
lcd.print("VACANT");
digitalWrite(redLED, LOW);
digitalWrite(greenLED, HIGH);
}
}