បើយើងចង់ឲ្យ Arduino ដំណើរការ 24ម៉ោងលើ 24ម៉ោង យើងត្រូវតែត្រៀមដំណោះស្រាយនៅពេលដែលវាគាំង ហើយត្រូវឲ្យមានការ Reset ដើម្បីដំណើរការឡើងវិញ។ ការប្រើប្រាស់ Watchdog Timer (WDT)ជាវិធី១ដែលអាចជួយឲ្យ្ Arduino Reset បាននៅក្នុងកូដ។
Watchdog Timer diagram |
WDT ជា Timer ដែលដំណើរការដោយលែកដែលចាំរាប់ថយក្រោយ នៅពេលដល់កំឡុងពេលដែលបានកំណត់(Timout) តែ Micro controller នៅតែមិនបង្ហាញសញ្ញា(Reset WDT) ថានៅតែដំណើរការធម្មតានោះ WDT នឹងធ្វើការ Reset Micro controller។ ខាងក្រោមនេះជាការបង្ហាញការប្រើប្រាស់ WDT នៅលើ Arduino UNO ដោយប្រើប្រាស់ Library របស់ Adafruit Sleep Dog។
Test Circuit |
សៀគ្វីខាងលើប្រើប្រាស់ LED នៅជើងទី13 ដែលឧបមារថាការបិទបើក LED ជាកូដដែលចង់ឲ្យដំណើរការ 24ម៉ោង ហើយចំនែកប៊ូតុងតទៅជើងទី 2 ដែលឧបមាថាអ្នកបង្កបញ្ហាគាំងដល់ Arduino។ ការសាកល្បងគឺនៅពេលប៊ូតុងត្រូវបានចុច ដែលបានន័យថា Arduino មានបញ្ហាហើយគាំង តែនឹងត្រូវបាន Reset ឲ្យដំណើរការឡើងវិញដោយសារ WDT(Sleepy Dog)។
#include <Adafruit_SleepyDog.h> bool led_status; void setup() { pinMode(13, OUTPUT); pinMode(2, INPUT_PULLUP); Watchdog.enable(5000); // Set WDT delay } void loop() { digitalWrite(13, led_status); // Main code led_status = !led_status; if(!digitalRead(2)){ while(1); // Error stuck here } Watchdog.reset(); // Reset WDT delay(200); }