#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
Servo servo;
int angle = 10;
const int trigPin = 12;
const int echoPin = 11;
long duration;
float distance;
bool doorOpen = false;
unsigned long openTime;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
servo.attach(8);
servo.write(angle);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
lcd.begin(16,2);
lcd.backlight();
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2.0;
String distanceString = String(distance, 1);
if (distance < 20) {
lcd.setCursor(0, 0);
lcd.print("Selamat Datang ");
} else {
lcd.setCursor(0, 0);
lcd.print("Pintu Menutup ");
}
lcd.setCursor(0, 1);
lcd.print("Jarak: ");
lcd.print(distanceString);
lcd.print(" cm ");
if (distance < 20) {
if (!doorOpen) {
servo.write(100);
doorOpen = true;
openTime = millis();
} else if ((millis() - openTime) >= 10000) { // Menutup pintu setelah 10 detik
servo.write(10);
doorOpen = false;
}
} else {
if (doorOpen) {
servo.write(10);
doorOpen = false;
}
}
delay(100);
}