นาฬิกาที่แม่นยำ: ตัวนับถอยหลังพื้นฐาน
ตัวนับถอยหลังดูเหมือนจะง่ายอย่างไม่น่าเชื่อ—แค่เขียน time = time - 1; delay(1000); อย่างไรก็ตาม โค้ดดังกล่าวมีข้อบกพร่อง Arduino ใช้เวลาไม่กี่มิลลิวินาทีในการประมวลผลทางคณิตศาสตร์และอัปเดตหน้าจอ เมื่อเวลาผ่านไป 30 นาที ความล่าช้าเล็กๆ น้อยๆ เหล่านี้จะสะสม ทำให้เวลาของนาฬิกาคุณผิดเพี้ยนไปโดยสิ้นเชิง! Basic Countdown Timer นี้จะสอนแนวคิดที่สำคัญของ Non-Blocking Timers

การใช้ millis() เพื่อความแม่นยำ
ฟังก์ชัน millis() จะบันทึกอย่างแม่นยำว่ามีกี่มิลลิวินาทีผ่านไปแล้วนับตั้งแต่บอร์ดได้รับพลังงาน
- ตัวแปร:
unsigned long previousMillis = 0;และconst long interval = 1000; - ลูปตรรกะ:
unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // Reset the marker countdownSeconds--; // The actual countdown } - เนื่องจากโค้ดนี้ไม่เคยหยุดโปรเซสเซอร์จริงๆ Arduino จึงสามารถเรียกใช้โค้ดอื่นๆ (เช่น การตรวจสอบว่าผู้ใช้กดปุ่มหรือไม่) ได้หลายล้านครั้งภายในหนึ่งวินาทีโดยไม่เสียการติดตามเวลาเลย!
การจัดรูปแบบการแสดงผลบน LCD
คุณไม่ต้องการให้หน้าจอแสดง 343 seconds แต่ควรแสดง 05:43
Minutes = (countdownSeconds / 60) % 60;Seconds = countdownSeconds % 60;คุณจะพิมพ์ค่าเหล่านี้ไปยัง 16x2 text LCD โดยตรวจสอบให้แน่ใจว่าได้สั่งให้โค้ดพิมพ์"0"เพิ่มเติมหากตัวเลขน้อยกว่า 10 มิฉะนั้นจะแสดง"5:9"ที่ไม่สวยงามแทนที่จะเป็น"05:09"
ชิ้นส่วนที่ต้องใช้
- Arduino Uno/Nano
- 16x2 Text LCD (ควรมี I2C Backpack เพื่อให้การเดินสายง่ายขึ้น)
- Push Button: สำหรับ Start/Pause