เดโมนี้เหมาะกับคอมพิวเตอร์ บนมือถือใช้ได้แต่พื้นที่แคบ · This demo is best on a computer; it works on a phone but the workbench is cramped.

skillsiot

millis และการไม่หยุดรอ

delay หยุดทุกอย่าง โปรแกรมที่ต้องดูแลหลายอย่างพร้อมกันจึงต้องเลิกใช้มัน และหันมาเทียบเวลาแทน

ในบทนี้คุณจะ

  • ใช้ millis() เทียบเวลาแทน delay()
  • ทำให้ไฟสองดวงกะพริบคนละจังหวะพร้อมกัน
  • อธิบายว่าทำไม delay ถึงขวางการอ่านอินพุต

1. delay คือการหยุดหายใจ

ระหว่าง delay(1000) โปรแกรมทำอะไรไม่ได้เลย อ่านปุ่มไม่ได้ ดูเซนเซอร์ไม่ได้ ถ้ามีอุปกรณ์ชิ้นเดียวก็ไม่เป็นไร แต่พอมีสองชิ้นขึ้นไป วิธีนี้ใช้ไม่ได้ทันที

2. เทียบเวลาแทนการรอ

millis() บอกว่าบอร์ดเปิดมากี่มิลลิวินาทีแล้ว เก็บเวลาที่ทำครั้งล่าสุดไว้ แล้วถามทุกรอบว่า "ผ่านไปครบหรือยัง" ถ้าครบก็ทำแล้วจดเวลาใหม่ ถ้ายังก็ปล่อยผ่านไปทำอย่างอื่น

3. สองจังหวะในลูปเดียว

เมื่อไม่มีการหยุดรอ คุณจะมีตัวจับเวลาหลายตัวในลูปเดียวได้ ไฟดวงหนึ่งทุก 1 วินาที อีกดวงทุก 0.4 วินาที ทำงานพร้อมกันโดยไม่รบกวนกัน ลองทำให้ D13 และ D12 กะพริบคนละจังหวะ

ตรวจความเข้าใจ

ทำไมสองไฟคนละจังหวะถึงเขียนด้วย delay ไม่ได้

ลงมือทำ

ลงมือทำ

ทำให้ไฟสองดวงกะพริบคนละจังหวะพร้อมกัน ดวงหนึ่งรอบละหนึ่งวินาที อีกดวงรอบละ 0.4 วินาที โดยไม่ใช้ delay เลย

เริ่มแล็บใน StudioStudio จะเปิดวงจรเริ่มต้นของบทนี้ พร้อมคำใบ้ เฉลย และการตรวจคำตอบจากค่าที่วัดได้