#include <Wire.h>
#include <LiquidCrystal.h>
// Deklarasi pin LCD
const int rs = 23; // Register Select
const int en = 22; // Enable
const int d4 = 21; // Data 4
const int d5 = 19; // Data 5
const int d6 = 18; // Data 6
const int d7 = 5; // Data 7
// Deklarasi pin sensor dan LED
const int pirpin = 16; // Pin PIR
const int ldrpin = 17; // Pin LDR
const int led = 26; // Pin LED
int pirState = LOW;
int val = 0;
const int LUX_THRESHOLD = 200; // Batas pencahayaan 200 lux
// Inisialisasi LCD
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
pinMode(led, OUTPUT);
pinMode(pirpin, INPUT);
pinMode(ldrpin, INPUT);
Serial.begin(9600);
// Inisialisasi LCD
lcd.begin(16, 2); // LCD 16x2
lcd.setCursor(1, 0);
lcd.print("LAMPU OTOMATIS");
lcd.setCursor(2, 1);
lcd.print("PACEENII");
delay(2000);
lcd.clear();
}
void loop() {
val = digitalRead(pirpin); // Membaca sensor PIR
int ldrValue = analogRead(ldrpin); // Membaca sensor LDR
float lux = (ldrValue / 4095.0) * 1000; // Konversi kasar ke lux (ubah sesuai LDR)
Serial.print("PIR: ");
Serial.print(val);
Serial.print(" | LDR: ");
Serial.print(ldrValue);
Serial.print(" | Lux: ");
Serial.println(lux);
if (lux > LUX_THRESHOLD) { // Ruangan terang (>200 lux)
digitalWrite(led, LOW); // LED mati
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ruangan Terang");
lcd.setCursor(0, 1);
lcd.print("Lampu Redup");
}
else { // Ruangan redup (<200 lux)
if (val == HIGH) { // Ada gerakan
digitalWrite(led, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ruangan Redup");
lcd.setCursor(0, 1);
lcd.print("Ada Gerakan");
}
else { // Tidak ada gerakan
digitalWrite(led, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ruangan Redup");
lcd.setCursor(0, 1);
lcd.print("Tidak Ada Gerakan");
}
}
delay(500); // Tambahkan delay untuk mengurangi flickering LCD
}