#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define LTRUCK 2
#define L20KL 3
#define L50KL 4
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int delayPARKING20KL = 10; // 10 detik
const int distanceA_PARKING20KL = 50; // Contoh batas bawah jarak (dalam cm)
const int distanceB_PARKING20KL = 100; // Contoh batas atas jarak (dalam cm)
bool state = false;
unsigned long startMillis = 0;
int elapsedSeconds20KL = 0;
int lastDisplayedTime = -1;
int distance = 0;
void setup() {
pinMode(LTRUCK, OUTPUT);
pinMode(L20KL, OUTPUT);
pinMode(L50KL, OUTPUT);
lcd.init();
lcd.backlight();
Serial.begin(9600);
}
void loop() {
distance = 75; // Simulasi jarak, ubah dengan sensor sebenarnya
if (state) {
lcd.setCursor(0, 1); lcd.print("Selesai Timer ");
Serial.println("Selesai Timer");
return;
}
if (distance > distanceA_PARKING20KL && distance < distanceB_PARKING20KL) {
if (startMillis == 0) startMillis = millis(); // Mulai hitung waktu
elapsedSeconds20KL = (millis() - startMillis) / 1000;
digitalWrite(LTRUCK, HIGH);
digitalWrite(L20KL, HIGH);
digitalWrite(L50KL, LOW);
if (elapsedSeconds20KL >= delayPARKING20KL) {
state = true;
}
if (elapsedSeconds20KL != lastDisplayedTime) {
lastDisplayedTime = elapsedSeconds20KL;
lcd.setCursor(0, 0); lcd.print("Water Filling Machine");
lcd.setCursor(0, 1); lcd.print("Distance: " + String(distance) + " cm ");
lcd.setCursor(0, 2); lcd.print("S. Truck: Truk 20KL ");
lcd.setCursor(0, 3); lcd.print("Timer : " + String(elapsedSeconds20KL) + " s ");
Serial.println("Timer: " + String(elapsedSeconds20KL) + " s");
}
} else {
startMillis = 0; // Reset waktu jika truk keluar
}
}