// ตั้งค่าค่าเริ่มต้นของหลอดไฟแต่ละดวง
const int numLEDs = 8;
int ledPins[numLEDs] = {2, 3, 4, 5, 6, 7, 8, 9}; // ตัวอย่างเท่านั้น คุณสามารถปรับเปลี่ยนตามต้องการ
// Watchdog timer interval (ms)
const int watchdogInterval = 1000; // ตั้งค่าเป็น 1 วินาที
// นับลำดับการเปิด-ปิดของหลอดไฟ
int currentIndex = 0;
void setup() {
// ตั้งค่าหลอดไฟเป็น OUTPUT
for (int i = 0; i < numLEDs; i++) {
pinMode(ledPins[i], OUTPUT);
}
// ตั้งค่า Watchdog timer
setupWatchdogTimer();
}
void loop() {
// โค้ดที่ควบคุมการทำงานของหลอดไฟ
// ตัวอย่างเช่น เปิดหลอดไฟตาม currentIndex
digitalWrite(ledPins[currentIndex], HIGH);
delay(500); // เปิดหลอดไฟเป็นเวลา 500 มิลลิวินาที
digitalWrite(ledPins[currentIndex], LOW);
// เลื่อน currentIndex ไปหลอดไฟถัดไป
currentIndex = (currentIndex + 1) % numLEDs;
// รีเซ็ต Watchdog timer
resetWatchdogTimer();
}
void setupWatchdogTimer() {
cli(); // ปิดการกินอิสระ interrupt
// Watchdog timer configuration
WDTCSR = bit(WDCE) | bit(WDE); // เปิดโหมดการกินอิสระ watchdog
WDTCSR = bit(WDIE) | bit(WDP3) | bit(WDP0); // ตั้งค่า watchdog interval เป็น 1 วินาที
sei(); // เปิดการกินอิสระ interrupt
}
void resetWatchdogTimer() {
cli(); // ปิดการกินอิสระ interrupt
// Reset watchdog timer
asm volatile ("wdr"); // รีเซ็ต watchdog timer
sei(); // เปิดการกินอิสระ interrupt
}
ISR(WDT_vect) {
// จัดการเหตุการณ์ watchdog interrupt
// สามารถนำเอาการเปลี่ยนแปลงของหลอดไฟมาใช้งานต่อได้ตามต้องการ
}