กลับไปหน้ารวมไฟล์
basic-arduino-countdown-timer.md

นาฬิกาที่แม่นยำ: ตัวนับถอยหลังพื้นฐาน

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

stock_counter_lcd_setup_1772706693516.png

การใช้ millis() เพื่อความแม่นยำ

ฟังก์ชัน millis() จะบันทึกอย่างแม่นยำว่ามีกี่มิลลิวินาทีผ่านไปแล้วนับตั้งแต่บอร์ดได้รับพลังงาน

  1. ตัวแปร: unsigned long previousMillis = 0; และ const long interval = 1000;
  2. ลูปตรรกะ:
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis; // Reset the marker
      countdownSeconds--;             // The actual countdown
    }
    
  3. เนื่องจากโค้ดนี้ไม่เคยหยุดโปรเซสเซอร์จริงๆ 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

ข้อมูล Frontmatter ดั้งเดิม

title: "Basic Arduino Countdown Timer"
description: "A digital hourglass! Learn to build a functional, reliable countdown timer utilizing milli-second tracking instead of blocking delays to display time on an LCD."
category: "Productivity"
difficulty: "Intermediate"