#include <LiquidCrystal_I2C.h>
// Define pin constants
const int ledPin = 13;
const int pirPin = 12;
const int ldrPin = 7;
int pirState = LOW;
int val = 0;
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(pirPin, INPUT);
pinMode(ldrPin, INPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("LAMPU OTOMATIS");
lcd.setCursor(2, 1);
lcd.print("RADIFAN RF");
delay(2000);
lcd.clear();
}
void displayMessage(const char *line1, const char *line2, int delayTime = 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
delay(delayTime);
}
void loop() {
val = digitalRead(pirPin);
if (val == LOW && digitalRead(ldrPin) == LOW) {
// No motion and it's bright
digitalWrite(ledPin, LOW);
displayMessage("JL. Kemuning", "", pirState == HIGH ? 3000 : 0);
pirState = LOW;
} else if (val == HIGH && digitalRead(ldrPin) == LOW) {
// Motion detected and it's bright
digitalWrite(ledPin, LOW);
if (pirState == LOW) {
displayMessage("Hati-Hati", "Di Jalan", 3000);
pirState = HIGH;
}
} else if (val == HIGH && digitalRead(ldrPin) == HIGH) {
// Motion detected and it's dark
digitalWrite(ledPin, HIGH);
if (pirState == LOW) {
displayMessage("Hati-Hati", "Di Jalan", 3000);
pirState = HIGH;
}
digitalWrite(ledPin, LOW);
} else {
// No motion detected
displayMessage("JL. Kemuning", "", 0);
}
}