#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD dengan alamat I2C 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definisi pin
const int PHOTO_ANALOG_PIN = 4; // Pin analog photoresistor
const int PHOTO_DIGITAL_PIN = 5; // Pin digital photoresistor
// Variabel untuk menyimpan nilai
int analogValue = 0;
int digitalValue = 0;
int lastAnalogValue = -1; // Untuk menghindari update LCD yang tidak perlu
void setup() {
// Mulai Serial Monitor
Serial.begin(115200);
// Konfigurasi pin
pinMode(PHOTO_DIGITAL_PIN, INPUT);
// Konfigurasi I2C dengan pin kustom
Wire.begin(33, 36); // SDA=33, SCL=36
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Tampilkan pesan awal
lcd.setCursor(0, 0);
lcd.print("Light Sensor");
lcd.setCursor(0, 1);
lcd.print("Initializing...");
delay(2000);
lcd.clear();
}
void loop() {
// Baca nilai sensor
analogValue = analogRead(PHOTO_ANALOG_PIN);
digitalValue = digitalRead(PHOTO_DIGITAL_PIN);
// Mapping nilai analog (0-4095) ke persentase (0-100)
int lightPercentage = map(analogValue, 0, 4095, 0, 100);
// Update LCD hanya jika nilai berubah
if (lastAnalogValue != analogValue) {
// Baris pertama: Nilai Analog dan Digital
lcd.setCursor(0, 0);
lcd.print("A:");
lcd.print(lightPercentage);
lcd.print("% D:");
lcd.print(digitalValue);
lcd.print(" ");
// Baris kedua: Status cahaya
lcd.setCursor(0, 1);
lcd.print("Light: ");
if (lightPercentage < 30) {
lcd.print("Dark ");
} else if (lightPercentage < 70) {
lcd.print("Medium ");
} else {
lcd.print("Bright ");
}
lastAnalogValue = analogValue;
}
// Output ke Serial Monitor
Serial.print("Analog: ");
Serial.print(analogValue);
Serial.print(" (");
Serial.print(lightPercentage);
Serial.print("%) Digital: ");
Serial.println(digitalValue);
delay(100); // Delay kecil untuk stabilitas
}