#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define LDR_PIN A0
#define LED_HIJAU 8
#define LED_KUNING 9
#define LED_MERAH 10
#define BUTTON_PIN 7
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows
int bufferValue = 0; // Buffer untuk menyimpan nilai LDR
bool decreaseLight = false;
int lastLdrValue = 0; // Variabel untuk menyimpan nilai LDR sebelumnya
void setup() {
pinMode(LDR_PIN, INPUT);
pinMode(LED_HIJAU, OUTPUT);
pinMode(LED_KUNING, OUTPUT);
pinMode(LED_MERAH, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
lcd.init();
lcd.backlight();
Serial.begin(9600);
}
void loop() {
int ldrValue = analogRead(LDR_PIN);
int adjustedLdrValue = 1023 - ldrValue; // Membalikkan nilai LDR
if (!decreaseLight) {
if (abs(adjustedLdrValue - lastLdrValue) > 50) { // Periksa perubahan signifikan
bufferValue = adjustedLdrValue; // Update buffer dengan nilai LDR yang baru dibaca
lastLdrValue = adjustedLdrValue;
}
}
Serial.println(bufferValue);
// Threshold values for the LED indicators
int thresholdGreen = 300;
int thresholdYellow = 600;
if (bufferValue < thresholdGreen) {
digitalWrite(LED_HIJAU, HIGH);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, LOW);
lcd.clear();
lcd.print(bufferValue);
lcd.print(":Cahaya Aman!");
} else if (bufferValue < thresholdYellow) {
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_KUNING, HIGH);
digitalWrite(LED_MERAH, LOW);
lcd.clear();
lcd.print(bufferValue);
lcd.print(":Cahaya Siaga!");
} else {
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, HIGH);
lcd.clear();
lcd.print(bufferValue);
lcd.print(":Tidak Aman!");
lcd.setCursor(0, 1);
lcd.print("Kurangi Cahaya!");
if (digitalRead(BUTTON_PIN) == LOW) { // Button pressed
lcd.clear();
lcd.print("Proses Pengurangan!");
decreaseLight = true;
}
}
if (decreaseLight) {
bufferValue -= 100;
if (bufferValue < 0) bufferValue = 0; // Ensure value does not go negative
// Update LED status and LCD display
if (bufferValue < thresholdGreen) {
digitalWrite(LED_HIJAU, HIGH);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, LOW);
lcd.clear();
lcd.print(bufferValue);
lcd.print(":Cahaya Aman!");
decreaseLight = false;
} else if (bufferValue < thresholdYellow) {
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_KUNING, HIGH);
digitalWrite(LED_MERAH, LOW);
lcd.clear();
lcd.print(bufferValue);
lcd.print(":Cahaya Siaga!");
} else {
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, HIGH);
lcd.clear();
lcd.print(bufferValue);
lcd.print(":Tidak Aman!");
lcd.setCursor(0, 1);
lcd.print("Proses Pengurangan!");
}
delay(1000); // Simulate delay in light reduction
}
delay(1000); // Delay 1 second
}