ไม่ยากดัดแปลงโคดนิดหน่อยก็ได้แล้ว ในโคดนี้ LED จะทำงานทุก 1 วินาที
ตามตัวอย่างนี้ครับ
https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
ทำได้ครับ ลองดูการต่อกล้องวงจรปิด ที่ดูผ่านมือถือได้ ก็ใช้หลักการเดียวกัน
ดูเรื่อง No-IP ครับ
เพิ่มเติมครับ ถ้าเปิดอุปกรณ์ทำงานตลอดเวลา
การใช้คำสั่ง millis() จะให้ค่าตัวแปรเป็นประเภท unsigned long
ซึ่งตัวแปรจะล้นหรือ overflow ทำให้โปรแกรมเราทำงานผิดพลาดหลังจาก 49 วัน
วิธีแก้คือให้เช็คว่าค่า millis ค่าเป็น overflow แล้ว ดังตัวอย่างนี้ https://www.baldengineer.com/arduino-how-do-you-reset-millis.html
เมื่อโปรแกรมจับได้ว่า overflow เราก็สั่งให้โปรแกรม reset ตามโคดนี้ http://forum.arduino.cc/index.php?topic=49581.0
software_Reset() ;
void software_Reset() // Restarts program from beginning but does not reset the peripherals and registers
{
asm volatile (" jmp 0");
}
ขอบคุณครับ เดี๋ยวจะไปศึกเพิ่มเติมครับ
มีเรื่องถามต่อครับจากคำถามเเรก ในลูปเครื่องเเตะบัตรจะรันโค้ดที่รอบัตรมาเเตะตลอดเวลา พอเเต่เเล้วก็จะบวกจำนวนครั้งที่เเตะไปเรื่อยๆสำหรับเเต่ละคน ทีนี้อยากจะทำปุ่มสักปุ่มนึง พอกดเเล้วจะเป็นโหมดการเชคว่าเเตะไปกี่ครั้งเเล้ว ปัญหาคือไม่เข้าใจะว่าจะเขีนโค้ดยังไงให้เมื่อกดปุ่มเเล้วให้รันอยู่ในลูปของการเชค(กดปุ่มเเล้วเอาบัตรเเตะเเละโชว์ค่า)โดยที่ให้มันค้างอยู่ในลูปนั้นอะครับ พอจะเข้าใจไหมครับ
แบบนี้เรียกว่าการ interrupt ใช้ขา interrupt เช็คครับ เมื่อมีคำสั่ง interrupt เข้ามา โคดก่อนหน้าจะหยุดการทำงานไว้ แล้วไปทำคำสั่งใน interrupt ก่อน เมื่อเสร็จแล้วก็จะกระโดดมาทำคำสั่งที่ค้างไว้ต่อไป https://www.arduino.cc/en/Reference/AttachInterrupt
ปกติ arduino เป็น single task ทำงานทีละอย่าง แต่ก็มีวิธีจำลองให้ทำให้ทำงานหลายอย่างพร้อมกันได้แรียกว่า multitasking ทำได้ง่าย ๆ ได้โดยใช้ไลบารีนี้ครับ https://create.arduino.cc/projecthub/feilipu/using-freertos-multi-tasking-in-arduino-ebc3cc?ref=tag&ref_id=tasks&offset=1