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