#include <Servo.h>
#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
#define PIR_PIN 2
#define LED_PIN 3
#define BUZZER_PIN 4
#define SERVO_PIN 5
int pirState = LOW;
int lastPirState = LOW;
Servo servo;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat LCD biasanya 0x27 atau 0x3F
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(SERVO_PIN, OUTPUT);
servo.attach(SERVO_PIN);
lcd.begin(16, 2); // Inisialisasi LCD 16x2
lcd.backlight(); // Mengaktifkan backlight LCD
lcd.setCursor(0, 0);
lcd.print("PIR Sensor Test");
delay(200); // Tampilkan pesan awal selama 2 detik
lcd.clear();
}
void loop() {
pirState = digitalRead(PIR_PIN);
if (pirState == HIGH && lastPirState == LOW) {
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1000);
delay(500);
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN);
// Gerakkan servo ke posisi 90 derajat
servo.write(90);
lcd.setCursor(0, 0);
lcd.print("Motion Detected! ");
lcd.setCursor(0, 1);
lcd.print("Servo: 90 deg ");
delay(1000);
// Kembalikan servo ke posisi 0 derajat
servo.write(0);
lcd.setCursor(0, 1);
lcd.print("Servo: 0 deg ");
} else if (pirState == LOW && lastPirState == HIGH) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("No Motion ");
lcd.setCursor(0, 1);
lcd.print("Servo: Idle ");
}
lastPirState = pirState;
delay(100); // Delay kecil untuk stabilitas pembacaan PIR
}