#define PIR_SENSOR 27
#define LED 26
#define TIMEOUT 5
unsigned long now_time = millis();
unsigned long last_time = 0;
boolean startTime = false;
boolean motion_detect = false;
void IRAM_ATTR detactCallback() {
digitalWrite(LED, HIGH); // Bật LED khi có chuyển động
startTime = true; // Bắt đầu đếm thời gian dừng chuyển động
last_time = millis(); // Lưu lại thời gian phát hiện chuyển động
}
void setup() {
Serial.begin(9600);
pinMode(PIR_SENSOR, INPUT_PULLUP);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW); // Tắt LED lúc khởi động
// Gán hàm ngắt khi phát hiện chuyển động từ cảm biến PIR
attachInterrupt(digitalPinToInterrupt(PIR_SENSOR), detactCallback, RISING);
}
void loop() {
now_time = millis(); // Cập nhật thời gian hiện tại
// Kiểm tra nếu đã phát hiện chuyển động và thời gian đã vượt quá TIMEOUT giây
if (startTime && (now_time - last_time) > TIMEOUT * 1000) {
Serial.println("Motion stopped...");
digitalWrite(LED, LOW); // Tắt LED sau TIMEOUT giây
startTime = false; // Ngừng đếm thời gian
motion_detect = false; // Đặt lại trạng thái phát hiện chuyển động
}
}