#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define LED_GREEN 2
#define LED_RED 3
#define relay 6
unsigned long lastMillis = 0; // variabel untuk menampung waktu terakhir pembacaan nilai analog
unsigned long sekarang = 0;
int interval = 2000; // interval waktu untuk mengambil nilai inputan analog
int test = 1000;
float threshold = 0.01; // ambang batas untuk membandingkan nilai inputan analog
float akhir = 0;
float data = 0;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("System Ready");
delay(1000);
lcd.clear();
pinMode(LED_GREEN, OUTPUT); // LED hijau sebagai output
pinMode(LED_RED, OUTPUT); // LED merah sebagai output
pinMode(relay, OUTPUT);
}
void loop() {
int adc=(analogRead(A0));
float vin = adc * (5.0 / 1023.0);
unsigned long currentMillis = millis(); // mengambil waktu sekarang
if (currentMillis - lastMillis >= interval) { // memeriksa interval waktu
data = vin;
lastMillis = currentMillis; // menyimpan waktu terakhir pembacaan nilai analog
}
if(currentMillis - sekarang >= test){
akhir = data - threshold;
sekarang = currentMillis;
}
lcd.setCursor(0,0);
lcd.print("V: ");
lcd.print(data,4);
if (data < akhir) { // membandingkan nilai inputan analog dengan ambang batas
digitalWrite(LED_RED, HIGH); // nyalakan LED merah
digitalWrite(LED_GREEN, LOW); // matikan LED hijau
digitalWrite(relay, HIGH);
delay(1000);
} else {
digitalWrite(LED_RED, LOW); // matikan LED merah
digitalWrite(LED_GREEN, HIGH); // nyalakan LED hijau
digitalWrite(relay, LOW);
}
}