#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define LDR_PIN A0
const float GAMMA = 0.7;
const float RL10 = 50;
// Inisialisasi LCD dengan alamat I2C (biasanya 0x27 atau 0x3F)
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(LDR_PIN, INPUT);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
Serial.begin(9600);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Initializing...");
delay(2000);
}
void loop() {
int analogValue = analogRead(LDR_PIN);
float voltage = analogValue / 1024.0 * 5.0;
float resistance = 2000.0 * voltage / (1.0 - voltage / 5.0);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1.0 / GAMMA));
lcd.clear();
lcd.setCursor(0, 0);
if (lux >= 0 && lux < 20) {
lcd.print("Cahaya Gelap");
digitalWrite(4, HIGH);
digitalWrite(3, LOW);
digitalWrite(2, LOW);
} else if (lux >= 20 && lux < 2000) {
lcd.print("Cahaya Redup ");
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
digitalWrite(2, LOW);
} else if (lux >= 2000 && lux < 10000) {
lcd.print("Cahaya Terang");
digitalWrite(4, LOW);
digitalWrite(3, LOW);
digitalWrite(2, HIGH);
} else {
lcd.print("Lux Out of Range");
}
lcd.setCursor(0, 1);
lcd.print("Lux: ");
lcd.print(lux);
Serial.print(" Lux: ");
Serial.println(lux);
delay(1000); // Beri waktu untuk melihat perubahan pada LCD
}