#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
#define button 2
#define pintu 3
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
Servo myservo;
enum Status {
Tertutup,
Wait1,
Buka,
Terbuka,
Wait2
};
Status kondisi = Tertutup;
void setup() {
lcd.init();
lcd.backlight();
myservo.attach(5);
pinMode(button, INPUT_PULLUP);
pinMode(pintu, INPUT_PULLUP);
}
void loop() {
switch (kondisi) {
case Tertutup:
lcd.setCursor(0, 0);
lcd.print("");
if (digitalRead(button) == LOW) {
kondisi = Wait1;
}
break;
case Wait1:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kunci Terbuka");
myservo.write(180);
kondisi = Buka;
break;
case Buka:
if (digitalRead(pintu) == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pintu Terbuka");
kondisi = Terbuka;
}
break;
case Terbuka:
if (digitalRead(pintu) == HIGH) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("///");
kondisi = Wait2;
}
break;
case Wait2:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pintu Tertutup");
myservo.write(90);
delay(1000);
lcd.clear();
kondisi = Tertutup;
break;
}
}