#105 Arduino Easy Task สอนใช้งาน Arduino ให้ทำงานหลายอย่างพร้อมกันการใช้งาน Arduino คำสั่งหน่วงเวลา เช่น การเขียนวงจรไฟกระพริบ แบบที่ทั่วไปเราจะใช้คำสั่ง delay() ก็สามารถหน่วงเวลาได้แล้ว ซึงง่ายและสะดวกมาก ๆ
แต่คำสั่ง delay() มีข้อเสียคือเราจะไม่สามารถทำงานอื่นพร้อมกันได้ ต้องรอจนกระทั่งคำสั่ง delay() รอจนครบเวลาแล้วถึงจะทำงานบรรทัดอื่นต่อได้

ปัญหา Arduino delay() ตัวอย่างเช่น
เราจะไม่สามารถเขียนโปรแกรมง่าย ๆ เช่นไฟกระพริบ 2 ดวง ดวงแรกกระพริบทุก 1 วินาที ดวงที่สองกระพริบทุก 3 วินาที เพราะติดคำสั่ง delay() ที่ดวงแรก ดวงที่สองจึงยังไม่ได้ทำงาน และพอดวงที่สองทำงาน ดวงที่หนึ่งก็จะไม่ทำงานเพราะยังติดคำสั่ง delay() ของตัวที่สองอยู่
วิธีแก้คือ ใช้คำสั่ง mills() เพื่อดึงเวลาออกมา แล้วใช้ if เช็คว่าครบเวลาที่กำหนดแล้ว
แต่วิธีนี้ก็ต้องเขียนโปรแกรมหลายส่วน ซักหน่อย ต้องเก็บตัวแปรสถานะต้องเช็ค if ของค่าต่าง ๆ โคดหลายบรรทัดพอสมควร จึงมีไลบารีออกมาช่วยให้ง่ายขึ้น
ตัวอย่างนี้เราก็จะทดลองโดยใช้ไลบารี Easy Scheduler ที่ย่อโคดให้ง่ายและเหลือไม่กี่บรรทัด ในการเขียนไฟกระพริบ 2 ดวงให้ทำงานเพื่อแก้ปัญหานี้
อุปกรณ์ที่ใช้ทดลอง
1. ต่อวงจรดังนี้
- led ดวงที่ 1 ต่อกับขา 12
- led ดวงที่ 2 ต่อกับขา 13 ในตัวอย่างนี้เราจะต่อหรือไม่ต้องต่อก็ได้ เพราะใช้ LED บนบอร์ด Arduino Uno
2. ดาวน์โหลดไลบารีที่นี้ Easy Schedulerไลบารีนี้เขียนคำสั่งครอบ การทำงานคำสั่ง millis() ไลบารีมีขนาดเล็ก ใช้งานง่ายด้วยโคดไม่กี่บรรทัด ความสามารถหลักดังนี้
- ลดความซับซ้อนของโคด
- ไม่ติดลูป block เหมือนคำสั่ง delay
- เรียกใช้ฟังก์ชันที่กำหนดไว้ใน Task ตามช่วงเวลาที่กำหนด
- สามารถหน่วงเวลาการทำงานของ Task ได้
- กำหนดจำนวนครั้งที่ต้องการให้ทำงานได้
- สามารถ หยุดทำงาน เริ่มทำงาน หรือพักงานชั่วคราวไว้ได้
3. อัพโหลดโคดตัวอย่างนี้ แล้วดูผลลัพธ์
---
จะเห็นว่าไฟ 2 ดวงสามารถทำงานได้เกือบจะพร้อมกันโดยไม่ติดปัญหา delay() แล้ว


ไลบารีนี้ยังมีตัวอย่างอีกหลายฟังก์ชั่น ที่ช่วยให้เขียนโคดง่ายขึ้น ลองเข้าไปเล่นกันดูนะครับ
