#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD I2C (alamat, jumlah kolom, jumlah baris)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definisikan pin untuk relay
const int relayPin = 7;
extern "C" {
// Fungsi assembly untuk inisialisasi ADC dan membaca sensor LDR
void init_adc();
uint16_t read_ldr();
}
void setup() {
// Inisialisasi komunikasi serial dan LCD
Serial.begin(9600);
lcd.begin();
lcd.backlight();
// Inisialisasi relay sebagai output
pinMode(relayPin, OUTPUT);
// Inisialisasi ADC (assembly)
init_adc();
// Tampilkan pesan awal
lcd.setCursor(0, 0);
lcd.print("LDR Monitoring");
}
void loop() {
// Baca nilai dari LDR (assembly)
uint16_t ldrValue = read_ldr();
// Hitung nilai lux dari pembacaan ADC (asumsi konversi sederhana)
float voltage = ldrValue * (5.0 / 1023.0); // Mengonversi ke tegangan
float lux = voltage * 100; // Konversi sederhana ke lux
// Tampilkan nilai lux di Serial Monitor dan LCD
Serial.print("Lux: ");
Serial.println(lux);
lcd.setCursor(0, 1);
lcd.print("Lux: ");
lcd.print(lux);
// Jika nilai lux di atas 100, maka relay ON dan tampilkan "Terang"
if (lux > 100) {
digitalWrite(relayPin, HIGH); // Nyalakan relay
lcd.setCursor(10, 1);
lcd.print("Terang");
} else {
digitalWrite(relayPin, LOW); // Matikan relay
lcd.setCursor(10, 1);
lcd.print("Gelap ");
}
// Delay 500 ms sebelum pembacaan berikutnya
delay(500);
}