ความรู้แน่น ฟรีสำหรับชุมชน ArduinoAll ที่นี่เท่านั้น

ฟรีและดีที่สุด คอร์สอบรม Arduino + NodeMCU
ทำเพื่อแบ่งปัน ห้ามนำไปจำหน่าย หรือเก็บเงินค่าเรียน
  !!!


  


AllNewStep รับประกันคุณภาพทุกชิ้น วันจันทร์-ศุกร์แจ้งชำระสินค้าก่อน 14.00 จัดส่งทันทีวันนี้ค่ะ

กรุงเทพ /ภาคกลาง ได้พรุ่งนี้


*** สินค้าทุกชิ้น ถ้าสามารถทำรายการสั่งซื้อได้ แสดงว่ามีครบทุกรายการค่ะ *** 

พิมพ์ค้นหาบทความ หัวข้อกระทู้ และสินค้าในเว็บ AllNewStep ได้ที่นี่
QUOTE 

บอร์ด arduino mega 2560 ค้าง

suthiruk

ปัญหาของผมก็ประมาณว่า
ผมใช้บอร์ด mega260 กับ enternet shields สั่งงานผ่านอินเทอเน็ตครับ

พอสั่งงานผ่านอินเทอเน็ตแล้ว อาการมันก็แบบว่าผีเข้าผีออก บางทีก็ค้าง บางทีก็ไม่ค้างง่ะครับ

เลยอยากสอบถามหน่อยครับ  ว่ามีโค้ดที่แบบว่าพอบอร์ดมันค้างแล้ว restart เริ่มการทำงานไหม่ เองได้ไหม

หรือยังใงก็ได้ครับ ช่วยแนะนำหน่อยครับ

QUOTE 
ความคิดเห็นที่ #1
เจ้าของร้าน

มีครับ โคดที่เช็คว่าถ้าบอร์ดค้างแล้วให้รีเซตเอง 

เรียกว่า 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/

QUOTE 
ความคิดเห็นที่ #2
Suthiruk
ขอบคุณมากครับ คุณเจ้าของร้าน จะลองดูครับ
QUOTE 
ความคิดเห็นที่ #3
Suthiruk
ใน loop ต้องอย่าให้เวลา เกิน 4sec ใช่หรือป่าวครับ แบบว่า void loop(){ wdt_enable(WDTO_4S); digitalWrite(LED_BUILTIN, HIGH); delay(2000); digitalWrite(LED_BUILTIN, LOW); delay(3000); wdt_reset(); } อันนี้เวลาเกิน 4sec มันจะรีเซ็ตเองใช่ใหมครับ และถ้าเป็นลักษณะนี้ void loop(){ wdt_enable(WDTO_4S); digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); wdt_reset(); } จะทำงานได้ปกติใช่ไหมครับ ผมเข้าใจถูกหรือป่าวครับ
QUOTE 
ความคิดเห็นที่ #4
Suthiruk
แล้วใส่มากกว่า 4 sec ได้หรือป่าวตรับ
QUOTE 
ความคิดเห็นที่ #5
เจ้าของร้าน

// 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 วินาที ถ้าต้องการนานกว่านั้น แนะนำให้แบ่งเช็คหลาย ๆ อันในแต่ละคำสั่งครับ

แสดงความคิดเห็นที่ 1-5 จากทั้งหมด 5 ความคิดเห็น
ขาย ARDUINO
คุณภาพ อันดับ 1

ได้รับรางวัลร้านยอดเยี่ยม
ตั้งแต่ปี 2558
ขาย Arduino
วีดีโอสอน Arduino

สอน esp8266

สอน Arduino IoT
สอน Arduino แบบเร็ว

สอน NodeMCU

อุปกรณ์ Arduino

MEMBER ZONE

พูดคุย-สอบถาม