ปัญหาของผมก็ประมาณว่า
ผมใช้บอร์ด mega260 กับ enternet shields สั่งงานผ่านอินเทอเน็ตครับ
พอสั่งงานผ่านอินเทอเน็ตแล้ว อาการมันก็แบบว่าผีเข้าผีออก บางทีก็ค้าง บางทีก็ไม่ค้างง่ะครับ
เลยอยากสอบถามหน่อยครับ ว่ามีโค้ดที่แบบว่าพอบอร์ดมันค้างแล้ว restart เริ่มการทำงานไหม่ เองได้ไหม
หรือยังใงก็ได้ครับ ช่วยแนะนำหน่อยครับ
มีครับ โคดที่เช็คว่าถ้าบอร์ดค้างแล้วให้รีเซตเอง
เรียกว่า Watchdog
ยกตัวอย่างการทำงานและเช็คว่าเครื่องค้าง Arduino จะทำการเช็คว่า การทำงานในคำสั่งนี้ใช้เวลา 3 วินาที แต่ถ้าเกิน 5 วินาทีแล้วยังทำงานไม่เสร็จ แสดงว่าบอร์ดน่าจะค้างหรือทำงานผิดปกติ ก็จะสั่งให้ reset
เพิ่มโคดไป 2 บรรทัด คือ
คำสั่งให้เริ่มจับเวลา wdt_enable(WDTO_4S);
เมื่อทำงานเสร็จก็ให้รีเซตเวลาจะได้เริ่มนับใหม่ wdt_reset();
ตัวอย่างการใช้งานดังนี้ครับ
https://bigdanzblog.wordpress.com/2014/10/24/arduino-watchdog-timer-wdt-example-code/
// enable the watchdog timer. There are a finite number of timeouts allowed (see wdt.h).
// Notes I have seen say it is unwise to go below 250ms as you may get the WDT stuck in a
// loop rebooting.
// The timeouts I'm most likely to use are:
// WDTO_1S
// WDTO_2S
// WDTO_4S
// WDTO_8S
wdt_enable(WDTO_4S);
ใช่ครับ เช็คได้สูงสุด 8 วินาที ถ้าต้องการนานกว่านั้น แนะนำให้แบ่งเช็คหลาย ๆ อันในแต่ละคำสั่งครับ