#include <LiquidCrystal.h>
// Pin definitions (match JSON connections)
const int trigPin = PA0;
const int echoPin = PA1;
const int ledPin = PA2;
const int buzzerPin = PA3;
const int relayPin = PA4;
// LCD pins (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(PB0, PB1, PB9, PB3, PB4, PB5);
// Detection threshold in cm
const int detectionDistance = 15;
void setup() {
// Initialize serial for debugging (optional)
Serial.begin(9600);
// Set pins mode
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(relayPin, OUTPUT);
// Initialize LCD
lcd.begin(16, 2);
lcd.print("Smart Appliance");
lcd.setCursor(0, 1);
lcd.print("Panel Starting");
delay(2000);
lcd.clear();
}
long readDistanceCM() {
// Clear trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Send 10us pulse to trigPin
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read echoPin pulse duration
long duration = pulseIn(echoPin, HIGH, 30000); // timeout 30ms
// Calculate distance in cm
long distance = duration * 0.034 / 2;
return distance;
}
void loop() {
long distance = readDistanceCM();
// Debug serial print
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
lcd.setCursor(0, 0);
lcd.print("Distance: "); // clear old data
lcd.setCursor(10, 0);
if (distance == 0 || distance > 400) {
lcd.print("Out of range");
} else {
lcd.print(distance);
lcd.print(" cm");
}
if (distance > 0 && distance <= detectionDistance) {
// Object detected within threshold
digitalWrite(ledPin, HIGH); // Turn on LED
digitalWrite(buzzerPin, HIGH); // Sound buzzer
digitalWrite(relayPin, HIGH); // Activate relay
lcd.setCursor(0, 1);
lcd.print("Status: Detected ");
} else {
// No object detected
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
digitalWrite(relayPin, LOW);
lcd.setCursor(0, 1);
lcd.print("Status: No Detect");
}
delay(500);
}