#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DOPPLER_PIN 18
#define RELAY_PIN 19
#define MSG0 "Motion Detected!"
#define MSG1 "No Motion Detected!"
#define INTERVAL 5 // Interval 5 detik
unsigned long previous_millis = 0; // Menyimpan waktu sebelumnya
unsigned long current_millis;
int8_t count = -2;
int motion_val = 0;
uint8_t is_off = 1;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(RELAY_PIN, OUTPUT);
pinMode(DOPPLER_PIN, INPUT);
lcd.init();
lcd.backlight();
}
void loop() {
current_millis = millis();
motion_val = digitalRead(DOPPLER_PIN);
lcd.setCursor(0, 0);
if (motion_val == HIGH) {
if (is_off == 0 && count == -2) return;
digitalWrite(RELAY_PIN, HIGH);
lcd.clear();
lcd.print(MSG0);
is_off = 0;
count = -2;
return;
}
if (count < -1) {
count = INTERVAL;
lcd.print(MSG1);
}
if (is_off == 1) return;
// Menunggu 5 detik sebelum mematikan lampu
if (current_millis - previous_millis >= 1000) {
previous_millis = current_millis;
count -= 1;
lcd.setCursor(0, 1);
lcd.printf("Delay: %d", count);
lcd.flush();
}
if (count < -1) {
//count = -1;
is_off = 1;
digitalWrite(RELAY_PIN, LOW);
lcd.clear();
}
}