millis และการไม่หยุดรอ
delay หยุดทุกอย่าง โปรแกรมที่ต้องดูแลหลายอย่างพร้อมกันจึงต้องเลิกใช้มัน และหันมาเทียบเวลาแทน
ในบทนี้คุณจะ
- ใช้ millis() เทียบเวลาแทน delay()
- ทำให้ไฟสองดวงกะพริบคนละจังหวะพร้อมกัน
- อธิบายว่าทำไม delay ถึงขวางการอ่านอินพุต
1. delay คือการหยุดหายใจ
ระหว่าง delay(1000) โปรแกรมทำอะไรไม่ได้เลย อ่านปุ่มไม่ได้ ดูเซนเซอร์ไม่ได้ ถ้ามีอุปกรณ์ชิ้นเดียวก็ไม่เป็นไร แต่พอมีสองชิ้นขึ้นไป วิธีนี้ใช้ไม่ได้ทันที
2. เทียบเวลาแทนการรอ
millis() บอกว่าบอร์ดเปิดมากี่มิลลิวินาทีแล้ว เก็บเวลาที่ทำครั้งล่าสุดไว้ แล้วถามทุกรอบว่า "ผ่านไปครบหรือยัง" ถ้าครบก็ทำแล้วจดเวลาใหม่ ถ้ายังก็ปล่อยผ่านไปทำอย่างอื่น
3. สองจังหวะในลูปเดียว
เมื่อไม่มีการหยุดรอ คุณจะมีตัวจับเวลาหลายตัวในลูปเดียวได้ ไฟดวงหนึ่งทุก 1 วินาที อีกดวงทุก 0.4 วินาที ทำงานพร้อมกันโดยไม่รบกวนกัน ลองทำให้ D13 และ D12 กะพริบคนละจังหวะ
ตรวจความเข้าใจ
ทำไมสองไฟคนละจังหวะถึงเขียนด้วย delay ไม่ได้
ลงมือทำ
ทำให้ไฟสองดวงกะพริบคนละจังหวะพร้อมกัน ดวงหนึ่งรอบละหนึ่งวินาที อีกดวงรอบละ 0.4 วินาที โดยไม่ใช้ delay เลย
เริ่มแล็บใน StudioStudio จะเปิดวงจรเริ่มต้นของบทนี้ พร้อมคำใบ้ เฉลย และการตรวจคำตอบจากค่าที่วัดได้