#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Address 0x27, 16 column and 2 rows
const int trigPin1 = 12; // Trigger pin of ultrasonic sensor 1
const int echoPin1 = 13; // Echo pin of ultrasonic sensor 1
const int trigPin2 = 14; // Trigger pin of ultrasonic sensor 2
const int echoPin2 = 15; // Echo pin of ultrasonic sensor 2
// Threshold distance for vacancy (in centimeters)
const float vacancyThreshold = 500.0;
// Function prototype
float measureDistance(int trigPin, int echoPin);
void setup() {
Serial.begin(9600);
// Initialize LCD
lcd.init();
lcd.backlight();
// Set ultrasonic sensor pins as input and output
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
}
void loop() {
// Measure distance from ultrasonic sensor 1
float distance1 = measureDistance(trigPin1, echoPin1);
// Measure distance from ultrasonic sensor 2
float distance2 = measureDistance(trigPin2, echoPin2);
// Display status on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Space 1: ");
if (distance1 < vacancyThreshold) {
lcd.print("Vacant ");
} else {
lcd.print("Occupied");
}
lcd.setCursor(0, 1);
lcd.print("Space 2: ");
if (distance2 > vacancyThreshold) {
lcd.print("Vacant ");
} else {
lcd.print("Occupied");
}
delay(1000); // Delay for readability
}
float measureDistance(int trigPin, int echoPin) {
// Generate ultrasonic pulse
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Measure echo time
float duration = pulseIn(echoPin, HIGH);
// Calculate distance in centimeters
float distance = duration * 0.034 / 2;
return distance;
}