Monday, March 13, 2023

[Video] សរសេរកូដកុំឲ្យ Arduino គាំងដើរ 24 ម៉ោង

បើយើងចង់ឲ្យ 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);
}