// กำหนดขาสำหรับ PIR Sensor และพัดลม
const int pirPin = 3; // ขา Digital ที่เชื่อมต่อกับ PIR Sensor (OUT)
const int fanPin = 2; // ขา Digital ที่เชื่อมต่อกับ Relay ของพัดลม
// ตัวแปรสำหรับจัดการเวลา
unsigned long fanOnStartTime = 0; // เวลาที่พัดลมเริ่มทำงานล่าสุด
const unsigned long fanOnDuration =600000; // ระยะเวลาที่พัดลมจะเปิด (15 วินาที เพื่อทดสอบ)
// ตัวแปรสถานะ
bool isFanOn = false; // สถานะของพัดลม (เปิด/ปิด)
bool pirPreviouslyHigh = false; // สถานะของ PIR ในรอบก่อนหน้า (ตรวจจับขอบขาขึ้น)
// ตัวแปรจัดการเวลาการพิมพ์ Serial
unsigned long lastPrintTime = 0; // เวลาแสดงผล Serial ล่าสุด
void setup() {
pinMode(pirPin, INPUT); // กำหนดขา PIR เป็น Input
pinMode(fanPin, OUTPUT); // กำหนดขาพัดลมเป็น Output
digitalWrite(fanPin, LOW); // เริ่มต้นให้พัดลมปิด (LOW คือปิดสำหรับ Relay ส่วนใหญ่)
Serial.begin(9600); // เริ่มต้น Serial Monitor สำหรับดูสถานะ
Serial.println("ระบบพร้อมทำงาน - รูปแบบที่ 1 (Fixed 15 วินาที run)");
Serial.print("พัดลมจะทำงานนาน: ");
Serial.print(fanOnDuration / 1000);
Serial.println(" วินาที หลังจากการตรวจจับครั้งแรก");
}
void loop() {
int pirState = digitalRead(pirPin); // อ่านค่าจาก PIR Sensor
// ตรวจจับ 'ขอบขาขึ้น' (Rising Edge) ของ PIR
if (pirState == HIGH && !pirPreviouslyHigh) {
if (!isFanOn) {
digitalWrite(fanPin, HIGH); // เปิดพัดลม
isFanOn = true;
fanOnStartTime = millis(); // บันทึกเวลาเริ่มต้น
Serial.println(">>> ตรวจจับคนได้! เปิดพัดลม.");
}
}
// อัปเดตสถานะ PIR สำหรับรอบถัดไป
pirPreviouslyHigh = (pirState == HIGH);
// ตรวจสอบเวลาการทำงานพัดลม
if (isFanOn) {
unsigned long elapsed = millis() - fanOnStartTime;
// ปิดพัดลมหากครบเวลาที่กำหนด
if (elapsed >= fanOnDuration) {
digitalWrite(fanPin, LOW);
isFanOn = false;
Serial.println("--- ครบเวลาแล้ว ปิดพัดลม.");
} else {
// แสดงเวลาที่ผ่านไปและเวลาที่เหลือ ทุก 1 วินาที
if (millis() - lastPrintTime >= 1000) {
unsigned long timeLeft = fanOnDuration - elapsed;
Serial.print("พัดลมทำงานมา: ");
Serial.print(elapsed / 1000);
Serial.print(" วินาที / เหลือ: ");
Serial.print(timeLeft / 1000);
Serial.println(" วินาที");
lastPrintTime = millis();
}
}
}
}