#include <ESP32Servo.h>
const int pirPin = 27; // กำหนดขาเซ็นเซอร์ PIR
const int servoPin = 16; // กำหนดขาเซอร์โว
Servo myServo; // สร้างวัตถุเซอร์โว
int servoPosition = 0; // ตัวแปรสำหรับเก็บตำแหน่งเซอร์โว
unsigned long lastMotionTime = 0; // ตัวแปรเก็บเวลาที่มีการตรวจจับการเคลื่อนไหว
const unsigned long motionTimeout = 10000; // เวลาหมดอายุ 10 วินาที
void setup() {
Serial.begin(115200); // เริ่มต้น Serial
myServo.attach(servoPin); // เชื่อมต่อเซอร์โวที่ขา
pinMode(pirPin, INPUT); // กำหนดขา PIR เป็น INPUT
myServo.write(0); // ตั้งค่าเซอร์โวให้เริ่มที่ 0 องศา
}
void loop() {
int pirState = digitalRead(pirPin); // อ่านสถานะของ PIR
if (pirState == HIGH) { // ถ้ามีการเคลื่อนไหว
Serial.println(" detected!"); // แสดงข้อความใน Serial Monitor
lastMotionTime = millis(); // อัปเดตเวลาที่มีการตรวจจับการเคลื่อนไหว
if (servoPosition == 0) {
servoPosition = 90; // เปลี่ยนตำแหน่งเซอร์โวเป็น 90 องศา
myServo.write(servoPosition); // ตั้งค่าตำแหน่งเซอร์โว
}
} else { // ถ้าไม่มีการเคลื่อนไหว
if (millis() - lastMotionTime > motionTimeout) {
// ถ้าผ่านไป 10 วินาที
if (servoPosition == 90) {
servoPosition = 0; // กลับไปที่ 0 องศา
Serial.println("Ready detected! again");
myServo.write(servoPosition); // ตั้งค่าตำแหน่งเซอร์โว
}
}
}
delay(100); // รอ 100 มิลลิวินาทีเพื่อไม่ให้ loop ทำงานเร็วเกินไป
}