#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#define ldrPin 2
int ledPin = 14;
const float gama = 0.7;
const float rl10 = 50;
unsigned long previousMillis = 0; // Waktu sebelumnya dalam milidetik
unsigned long interval = 1000; // Interval waktu per detik
unsigned long previousMessageMillis = 0; // Waktu sebelumnya pesan dikirim
const unsigned long messageInterval = 1000; // Interval pengiriman pesan (10 detik)
const unsigned long kemacetanInterval = 1000; // Interval penambahan tingkat kemacetan (10 detik)
int waktuPerDetik = 0; // Waktu per detik
int tingkatKemacetan = 1; // Tingkat kemacetan
bool sensorTerhalang = false; // Status sensor terhalang
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
}
void loop() {
delay(10);
int nilaiLDR = analogRead(ldrPin);
nilaiLDR = map(nilaiLDR, 4095, 0, 1024, 0);
float voltase = nilaiLDR / 1024.0 * 5;
float resistansi = 2000 * voltase / (1 - voltase / 5);
float kecerahan = pow(rl10 * 1e3 * pow(10.0, gama) / resistansi, (1.0 / gama)); // Perhatikan penggunaan angka desimal untuk tipe double
unsigned long currentMillis = millis(); // Ambil waktu sekarang
if (kecerahan < 1000) {
if (!sensorTerhalang) {
sensorTerhalang = true; // Ubah status sensor menjadi terhalang
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Status:Gelap");
}
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // Atur waktu sebelumnya menjadi waktu sekarang
waktuPerDetik++; // Tambahkan waktu per detik satu per detik
// Cek apakah sudah waktunya mengirim pesan
if (currentMillis - previousMessageMillis >= messageInterval) {
previousMessageMillis = currentMillis; // Atur waktu sebelumnya pesan dikirim
lcd.setCursor(0,1);
lcd.print("Selama ");
lcd.print(waktuPerDetik); // Tampilkan waktu per detik yang bertambah
lcd.print(" s");
// Tampilkan tingkat kemacetan setiap 10 detik
}
}
} else {
if (sensorTerhalang) {
sensorTerhalang = false; // Ubah status sensor menjadi tidak terhalang
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Status:Terang");
previousMillis = currentMillis; // Reset waktu sebelumnya
waktuPerDetik = 0; // Reset waktu per detik
tingkatKemacetan = 1; // Reset tingkat kemacetan
}
}
}