#include <ESP32Servo.h>
Servo Serv;
const int pinIR = 13; // Pin PIR
const int pinServo = 12; // Pin Servo
const int pinLED = 14; // Pin LED
int val = 0;
void setup() {
Serial.begin(115200);
// Membenarkan timer ESP32 untuk PWM Servo
ESP32PWM::allocateTimer(0);
ESP32PWM::allocateTimer(1);
ESP32PWM::allocateTimer(2);
ESP32PWM::allocateTimer(3);
Serv.setPeriodHertz(50); // Standard 50hz servo
Serv.attach(pinServo, 500, 2400);
Serv.write(0);
pinMode(pinIR, INPUT);
pinMode(pinLED, OUTPUT);
Serial.println("--- Sistem Dimulakan ---");
Serial.println("[SYSTEM] LED & Servo sedia.");
}
void loop() {
val = digitalRead(pinIR);
if (val == HIGH) {
Serial.println("[ALERT] Pergerakan Dikesan!");
digitalWrite(pinLED, HIGH); // Hidupkan LED
Serv.write(90); // Buka (90 darjah)
delay(5000); // Tunggu 5 saat
digitalWrite(pinLED, LOW); // Matikan LED
Serv.write(0); // Tutup semula
Serial.println("[STATUS] Kembali ke Standby.");
// Delay tambahan supaya sensor PIR tidak "double trigger"
delay(1000);
}
delay(100);
}