#include <Servo.h>
#include <EEPROM.h>
#include <LiquidCrystal.h>
#define trig 10
#define echo 9
#define servo 21
#define rs 12
#define en 11
#define d4 5
#define d5 4
#define d6 3
#define d7 2
Servo myServo;
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
int a=0;
int dist=0;
void setup() {
Serial.begin(9600);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
myServo.attach(servo);
myServo.write(0);
lcd.begin(16, 2);
dist = EEPROM.read(a);
if (dist>400||dist <0) {
dist = 30;
}
Serial.print("Current threshold:");
Serial.println(dist);
}
void loop() {
digitalWrite(trig, LOW);
delay(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
long time = pulseIn(echo, HIGH);
int distance = time * 0.034 / 2;
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(distance);
lcd.print("cm");
if (distance>0&&distance<dist) {
myServo.write(180);
lcd.setCursor(0, 0);
lcd.print("Door: Open ");
} else {
myServo.write(0);
lcd.setCursor(0, 0);
lcd.print("Door: Closed ");
}
if (Serial.available() > 0) {
int newdist = Serial.parseInt();
if (newdist!=0) {
dist = newdist;
EEPROM.write(a,newdist);
Serial.print("Threshold set to: ");
Serial.print(newdist);
Serial.println(" cm");
lcd.setCursor(0, 1);
a=a+1;
}
delay(50);
}
}