#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
#define LDR_PIN 34 // Pin ESP32 yang digunakan untuk sensor LDR (Analog)
#define LED_PIN 2 // Pin ESP32 yang digunakan untuk LED
// Inisialisasi LCD dengan alamat I2C 0x27, ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200); // Memulai komunikasi serial dengan baud rate 115200
Wire.begin(); // Memulai komunikasi I2C
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Mengaktifkan lampu latar LCD
pinMode(LED_PIN, OUTPUT); // Mengatur pin LED sebagai output
// Menampilkan daftar perangkat I2C yang terhubung
Serial.println("Scanning for I2C devices...");
for (byte address = 8; address < 127; address++) { // Looping alamat I2C yang valid (8 - 126)
Wire.beginTransmission(address); // Memulai komunikasi dengan perangkat I2C
if (Wire.endTransmission() == 0) { // Jika ada perangkat yang merespons
Serial.print("I2C device found at address 0x");
Serial.println(address, HEX); // Menampilkan alamat perangkat dalam format heksadesimal
delay(50); // Delay agar tampilan di Serial Monitor lebih terbaca
}
}
}
void loop() {
int ldrValue = analogRead(LDR_PIN); // Membaca nilai sensor LDR (cahaya)
Serial.print("LDR Value: ");
Serial.println(ldrValue); // Menampilkan nilai LDR di Serial Monitor
lcd.setCursor(0, 0); // Menentukan posisi kursor di LCD (baris pertama)
lcd.print("LDR Value: "); // Menampilkan teks dengan spasi tambahan untuk menghapus sisa karakter lama
lcd.setCursor(0, 1); // Memindahkan kursor ke baris kedua
lcd.print(ldrValue); // Menampilkan nilai sensor LDR
lcd.print(" "); // Membersihkan karakter lama dengan menambahkan spasi kosong
// Mengontrol LED berdasarkan nilai LDR (jika lebih dari 1000, LED menyala)
digitalWrite(LED_PIN, ldrValue > 1000 ? HIGH : LOW);
delay(500); // Delay 500ms sebelum membaca nilai berikutnya
}