// กำหนดขาสำหรับ PIR Sensor และพัดลม
const int pirPin = 3; // ขา Digital ที่เชื่อมต่อกับ PIR Sensor (OUT)
const int fanPin = 2; // ขา Digital ที่เชื่อมต่อกับ Relay ของพัดลม
// ตัวแปรสำหรับจัดการเวลา
unsigned long pirDetectedStartTime = 0; // เวลาที่ PIR เริ่มตรวจจับ
const unsigned long pirDetectionThreshold = 5 * 1000; // ต้องตรวจจับต่อเนื่อง 5 วินาที
unsigned long fanOnStartTime = 0; // เวลาที่พัดลมเริ่มทำงาน
const unsigned long fanOnDuration = 600000; // เปิดพัดลม 10 นาที (แก้ตามต้องการ)
// ตัวแปรสถานะ
bool isFanOn = false;
bool isPirActive = false;
int countdownSecond = 0;
unsigned long lastCountdownTime = 0;
unsigned long lastFanPrintTime = 0; // เก็บเวลาพิมพ์สถานะพัดลมครั้งล่าสุด
void setup() {
pinMode(pirPin, INPUT);
pinMode(fanPin, OUTPUT);
digitalWrite(fanPin, LOW); // เริ่มต้นปิดพัดลม
Serial.begin(9600);
Serial.println("ระบบพร้อมทำงาน (นับ 1-5 แล้วเปิดพัดลม)");
}
void loop() {
int pirState = digitalRead(pirPin);
// ตรวจสอบ PIR เฉพาะเมื่อพัดลมยังไม่เปิด
if (!isFanOn) {
if (pirState == HIGH) {
if (!isPirActive) {
pirDetectedStartTime = millis();
isPirActive = true;
countdownSecond = 0;
Serial.println("PIR ตรวจจับคนได้ เริ่มนับ 5 วินาที...");
}
if (millis() - lastCountdownTime >= 1000) {
countdownSecond++;
if (countdownSecond <= 5) {
Serial.print("นับ: ");
Serial.println(countdownSecond);
}
lastCountdownTime = millis();
}
if (millis() - pirDetectedStartTime >= pirDetectionThreshold) {
digitalWrite(fanPin, HIGH); // เปิดพัดลม
isFanOn = true;
fanOnStartTime = millis();
Serial.println("ตรวจจับต่อเนื่อง 5 วินาที! เปิดพัดลม.");
}
} else {
if (isPirActive) {
isPirActive = false;
countdownSecond = 0;
Serial.println("PIR หยุดตรวจจับ รีเซ็ตการนับ 5 วินาที.");
}
}
}
// ตรวจสอบเวลาการทำงานของพัดลม
if (isFanOn) {
unsigned long elapsed = millis() - fanOnStartTime;
if (elapsed >= fanOnDuration) {
digitalWrite(fanPin, LOW); // ปิดพัดลม
isFanOn = false;
Serial.println("ครบเวลาแล้ว ปิดพัดลม.");
} else {
// แสดงเวลาทำงานและเวลาที่เหลือ ทุก 1 วินาที
if (millis() - lastFanPrintTime >= 1000) {
unsigned long timeLeft = (fanOnDuration - elapsed) / 1000;
Serial.print("พัดลมทำงานมา: ");
Serial.print(elapsed / 1000);
Serial.print(" วินาที / เหลือ: ");
Serial.print(timeLeft);
Serial.println(" วินาที");
lastFanPrintTime = millis();
}
}
}
}