16x2 Arcade Execution: Arduino LCD Game
คุณเคยเล่นเกม "No Internet Dinosaur" ของ Google Chrome มาก่อน โปรเจกต์ Arduino LCD Video Game บังคับให้วิดีโอเกมแบบ side-scrolling ที่ดำเนินไปอย่างรวดเร็วและสมบูรณ์แบบนั้น เข้าไปอยู่ในบัฟเฟอร์ 32 ตัวอักษรที่จำกัดสุดๆ ของหน้าจอ 16x2 I2C LCD มาตรฐาน ซึ่งต้องอาศัยการสร้าง custom character อย่างหนักหน่วงและการปรับเปลี่ยน string ด้วยความเร็วสูง

สร้าง Custom Glyphs (Binary Byte Arrays)
ฟอนต์ LCD มาตรฐานไม่มีรูป "Running Man" หรือ "Cactus" คุณต้องวาดพวกมันทีละพิกเซลโดยใช้ค่า binary
- 16x2 LCD รองรับ custom character ได้สูงสุด 8 ตัว ซึ่งจัดเก็บอยู่ใน CGRAM ขนาดเล็ก
- คุณกำหนดกริด 5x8 พิกเซลในรูปแบบ C++ bytes บริสุทธิ์:
byte runner[8] = {
B01110,
B01110,
B00100,
B11111,
B00100,
B01010,
B01010,
B10001
};
lcd.createChar(0, runner); // เขียนภาพลงในหน่วยความจำของ LCD!
เอ็นจิน Array แบบ Side-Scrolling
ภาพลวงตาของวิดีโอเกมเกิดจากการเลื่อนลำดับ string ล้วนๆ
- สิ่งกีดขวาง (Obstacles): Arduino สร้าง string ขนาดใหญ่ที่ซ่อนอยู่ (เช่น
X X X X) - ในระหว่าง
loop()โค้ดจะบังคับให้ string เลื่อนไปทางซ้ายหนึ่งช่องทุกๆ 100 มิลลิวินาที โดยใช้substring(1) - ฟิสิกส์ของผู้เล่น (Interrupts): ตัวละครผู้เล่นจะถูกล็อกอยู่ที่
Column 2เสมอ if (digitalRead(jumpButton) == LOW) { playerRow = 0; }(ผู้เล่นกระโดดไปที่แถวบนสุดทันที!)- การตรวจจับการชน (Collision Detection):
if (obstacleString.charAt(2) == 'X' && playerRow == 1)-> Cactus สุดอันตรายชนผู้เล่นที่แถวล่างสุดอย่างรุนแรง! Game Over!
ฮาร์ดแวร์ที่จำเป็นสำหรับเกม
- Arduino Uno/Nano (สถาปัตยกรรมมาตรฐาน)
- จอแสดงผล 16x2 Character LCD พร้อม I2C Backpack (I2C ช่วยลดการเดินสายไฟจาก 16 ขาแบบขนานที่ซับซ้อนให้เหลือเพียง 4 สาย jumper wire ง่ายๆ!)
- Arcade Tactile Push Button ที่ตอบสนองได้ดี
- Passive Piezo Buzzer สำหรับเล่นเอฟเฟกต์เสียงกระโดดและเสียงชนครั้งสุดท้าย!