#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C default LCD biasanya 0x27
const int trigPin = 12;
const int echoPin = 14;
const int pirPin = 27; // Pin PIR
const int photoPin = 34; // Pin LDR (analog)
const int ledPin1 = 2; // Pin LED (misalnya pin 13)
const int ledPin2 = 0;
const int ledPin3 = 4;
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701
long duration;
float distanceCm;
float distanceInch;
int pirState = LOW;
int lightLevel;
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(pirPin, INPUT);
pinMode(photoPin, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT); // Set pin LED sebagai output
lcd.begin(20, 4);
lcd.init();
lcd.backlight(); // Nyalain backlight LCD
}
void loop() {
// Baca sensor PIR
pirState = digitalRead(pirPin);
// Baca sensor photoresistor (LDR)
lightLevel = analogRead(photoPin);
// Baca sensor ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(100);
digitalWrite(trigPin, HIGH);
delayMicroseconds(100);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm = duration * SOUND_SPEED / 2;
distanceInch = distanceCm * CM_TO_INCH;
// Debug output di Serial Monitor
Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.print("Distance (inch): ");
Serial.println(distanceInch);
Serial.print("Gerakan: ");
Serial.println(pirState);
Serial.print("Light Level: ");
Serial.println(lightLevel);
// Tampilkan data di LCD 20x4
lcd.clear();
// Baris 1: Jarak dalam cm dan inch
lcd.setCursor(0, 0);
lcd.print("Jarak: ");
lcd.print(distanceCm);
lcd.print("cm");
lcd.setCursor(0, 1);
if (distanceCm > 300) {
lcd.print("Status: Terlalu Jauh");
digitalWrite(ledPin1, LOW);
} else {
lcd.print("Status: Cukup Dekat");
digitalWrite(ledPin1, HIGH);
}
lcd.setCursor(0, 2);
if (pirState == HIGH) {
lcd.print("Gerakan: Terdeteksi");
digitalWrite(ledPin2, HIGH);
} else {
lcd.print("Gerakan: Tidak Ada");
digitalWrite(ledPin2, LOW);
}
// Baris 3: Level Cahaya dari LDR
lcd.setCursor(0, 3);
if (lightLevel > 500){
lcd.print("Cahaya: ");
lcd.print(lightLevel);
lcd.print("(Terang)");
digitalWrite(ledPin3, LOW); // LED mati jika cahaya terang
}
else{
lcd.print("Cahaya:");
lcd.print(lightLevel);
lcd.print("(Gelap)");
digitalWrite(ledPin3, HIGH); // LED nyala jika cahaya gelap
}
delay(3000);
}