#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define LED_RED 9
#define LED_GREEN 8
#define LED_BLUE 7
LiquidCrystal_I2C lcd(0x27, 16, 2); // Initialize LCD
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
}
void loop() {
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
unsigned long duration = pulseIn(ECHO_PIN, HIGH);
int distance = duration / 29 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
if(distance >= 107 && distance <= 120) { // Door is closed
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, HIGH);
digitalWrite(LED_BLUE, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Door is closed");
} else if(distance > 120) { // Door is open
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_BLUE, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Door is open");
lcd.setCursor(0, 1);
} else if(distance < 107){ // Door is partially open
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_BLUE, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Door is ");
lcd.setCursor(0, 1);
lcd.print("partially open");
}
delay(50); // Wait for 50ms before taking another reading
}