ก็คิดเล่นๆ ว่าจะทำนาฬิกาให้มันเดินได้ด้วย Arduino Uno แทนที่จะใช้โมดูล RTC ไปซะเลย ถึงจะใช้ได้ แต่พี่แนะนำให้ไปหาซื้อโมดูล RTC มาใช้จะดีกว่านะ ตรงเวลาแม่นยำกว่าเยอะ
ดูคลิปนี้แล้วจะเห็นว่ามันทำงานยังไง!
ฟอนต์เบิ้มๆ: นาฬิกา LCD 20x4 แบบ Custom
การพิมพ์ตัวหนังสือมาตรฐาน 5x8 พิกเซลลงบน LCD มันง่ายชิ้นหาย แต่เจ้า Extended 20x4 Custom Font Clock นี่แหละที่จะบังคับให้น้องต้องล้วงลึกเข้าไปในพารามิเตอร์ของไลบรารี LiquidCrystal ให้สุดตัว เป้าหมายคือสร้างตัวเลขที่กินพื้นที่ ความสูงทั้งหมด ของจอ 4 บรรทัด ให้เหมือนนาฬิกาดิจิทัลรุ่นเก่าๆ
การสร้าง Custom Character แบบ Hexadecimal
โมดูล LCD อนุญาตให้เราสร้างสัญลักษณ์แบบกำหนดเองได้สูงสุด 8 ตัว
- The Shapes: วาด "บล็อก" แบบกำหนดเอง 8 แบบ (เช่น บล็อกทึบ, บล็อกที่มีด้านบนเฉียง, บล็อกที่มีด้านล่างโค้ง) แล้วแปลงกริดพิกเซล 5x8 เหล่านี้ให้เป็นอาร์เรย์ของไบต์
- The Font Array: เขียนเมทริกซ์อาร์เรย์ 2 มิติตัวเบิ้มๆ ที่กำหนดวิธีการสร้างเลข "8" โดยใช้บล็อกพวกนี้ข้ามทั้ง 4 แถว
- The Assembly: เวลาจะวาดเลข "8" ที่ตำแหน่งเคอร์เซอร์ (0,0):
- แถว 1:
โค้ง, ทึบ, ทึบ, โค้ง - แถว 2:
ทึบ, ว่าง, ว่าง, ทึบ - น้องต้องเขียนอัลกอริทึมการพิมพ์ที่ซับซ้อนเพื่อจัดการกับการย้อนกลับของเคอร์เซอร์ เพื่อประกอบตัวเลขยักษ์นี่ขึ้นมาทีละบล็อก! งานเข้าแล้ววัยรุ่น
- แถว 1:
การเชื่อมต่อฮาร์ดแวร์ I2C แบบแท้ๆ
เพราะนาฬิกาตัวนี้โคตรจะซับซ้อน การจับเวลาต้องถูกปลดออกไปให้หมด
- โมดูล DS3231 RTC จะถูกต่อสายเข้ากับพิน
SDA/SCLของ I2C - ที่สำคัญมาก จอ LCD 20x4 ต้อง มี I2C Backpack บัดกรีติดอยู่ด้านหลัง
- น้องต่อสาย I2C ของ LCD เข้ากับสายของ RTC แบบขนานโดยตรงเลย Arduino จะสั่งการทั้งตัวจับเวลาและจอแสดงผลโดยใช้สายแค่ 4 เส้นบนเบรดบอร์ด! จัดไป
อุปกรณ์ฮาร์ดแวร์
- Arduino Uno/Mega: เพราะอาร์เรย์ฟอนต์ตัวเบิ้ม ถ้าใช้ Mega จะดีกว่า เดี๋ยว SRAM ของ Uno เต็มเอา
- จอแสดงผลข้อความ LCD 20x4 (สีฟ้าหรือ เขียว/เหลือง) พร้อมโมดูล I2C
- โมดูลนาฬิกาจริงความแม่นยำสูง DS3231