ชื่อโปรเจกต์: เกม Pong สำหรับ 2 คน! (จัดไปวัยรุ่น)
ไงไอ้น้อง!
เคยเล่นเกม Pong ในคอมหรือพวกตู้เกมสมัยก่อนป่ะ? โปรเจกต์นี้แหละ คือเกมนั้นเลยแบบเป๊ะๆ
ไอเดียมันเริ่มจากงี้...
พี่ไปนั่งหาพวกเกม Pong ที่ใช้ [Arduino](https://s.shopee.co.th/7fUgFAWSki) กับ [OLED](https://s.shopee.co.th/5fjbrJWyFb) Display มา แล้วก็ไปเจอตัวนึงเข้า ตามนี้เลย:

เห้ย มันเจ๋งดีว่ะ แต่มันเล่นได้แค่คนเดียวไง พี่เลยจัดให้ใหม่แบบเล่นได้ 2 คนพร้อมกันไปเลย จะได้เอาไว้ดวลกับเพื่อนได้!
ปลุกตำนาน Retro บน Arduino
2-Player Pong Game คือการเอาเกมระดับตำนานปี 1972 มาทำใหม่ในเวอร์ชัน Hardware ยุคเรา โปรเจกต์นี้อัปเกรดจากเกม Arduino เดิมๆ ที่เล่นคนเดียวให้กลายเป็นโหมดดวลกันแบบ Head-to-Head สุดมันส์ ใช้จอ OLED ชัดๆ กับ Analog Joystick 2 อัน ควบคุม Paddle (ไม้ตี) ได้แบบ Real-time เพื่อสะท้อน "ลูกบอล" โต้กันไปมา บอกเลยว่ายกประวัติศาสตร์เกมมาไว้ในเครื่องพกพาแบบ DIY เท่ๆ เลยน้อง
อุปกรณ์ที่ต้องใช้ (เตรียมมาให้ครบนะ)
- Arduino UNO: ตัวประมวลผลหลัก เปรียบเหมือนสมองกลของเกม ทั้งคุม Physics, นับแต้ม และวาดกราฟิก
- Gravity I2C OLED Display (128x64): จอแสดงผลขาวดำความละเอียดสูง ให้ภาพคมกริบ การเชื่อมต่อแบบ I2C ทำให้ใช้ Pins ข้อมูลแค่ 2 เส้น เหลือขาไว้ต่อคอนโทรลเลอร์เพียบ
- Analog Joysticks (x2): ตัวคอนโทรลเลอร์หลักของเราเลย แต่ละจอยจะส่งค่าแรงดัน Analog ตามแกน Y (แนวตั้ง) ทำให้เราขยับไม้ตีได้ลื่นไหลและแม่นยำสุดๆ
- Active Buzzer: เอาไว้ทำ Sound Effects ตอนเล่น มันจะส่งเสียง "ติ๊ด" ทุกครั้งที่ลูกบอลโดนไม้หรือกำแพง และมีเสียงอีกโทนตอนได้แต้ม เพิ่มความเร้าใจ
- Breadboard และ Jumper Wires: เอาไว้เชื่อมทุกอย่างเข้าด้วยกัน ห้ามต่อช็อตนะตัวนี้ เดี๋ยวงานงอก
ระบบ Logic และ Physics ของตัวเกม
โค้ดในเครื่องจะทำงานใน Loop แบบความเร็วสูง (ประมาณ 60 Frames Per Second) ตามนี้เลย:
- Input Acquisition: Arduino จะคอยเช็กค่าจาก Joystick ทั้งสองตัวพร้อมกันด้วยคำสั่ง
analogRead()แล้ว Map ค่า (0-1023) ให้กลายเป็นพิกัดแนวตั้งบนหน้าจอ (0-63) - Paddle Update: อัปเดตตำแหน่งไม้ตีทั้งสองอันลงใน Buffer ของหน้าจอ
- Ball Physics:
- ลูกบอลจะมีพิกัด
X,Yและค่าความเร็วvX,vY(Velocity) - ทุกๆ Frame ตำแหน่งจะเปลี่ยนไปตามความเร็ว (Position = Position + Velocity)
- Collision Detection (การตรวจจับการชน): ถ้าพิกัดลูกบอลไปทับกับขอบของไม้ตีปุ๊บ เราจะกลับทิศทาง
vXทันที พร้อมสั่งให้ Buzzer ทำงาน
- ลูกบอลจะมีพิกัด
- Scoring: ถ้าลูกบอลหลุดขอบซ้ายหรือขวา ฝ่ายตรงข้ามจะได้แต้มทันที แล้วระบบจะอัปเดตคะแนน พร้อมกับ Reset บอลกลับไปที่จุดกึ่งกลาง
- Rendering: ส่งข้อมูลสถานะเกมที่คำนวณเสร็จแล้วทั้งหมดไปแสดงผลบนจอ OLED เป็นกราฟิกแบบลื่นๆ
ทำแล้วได้อะไร? (นอกจากความหล่อเท่)
การสร้างเกม Pong นี้ถือเป็นบทเรียนชั้นยอดเรื่องการออกแบบ Graphical User Interface (GUI), การจัดการ Input แบบ Real-time และความรู้เรื่อง Collision Geometry (เรขาคณิตการชน) น้องจะได้เรียนรู้วิธีจัดการ Hardware หลายๆ เลเยอร์พร้อมกัน ทั้งจอแสดงผล, เสียง และ Analog Input เพื่อสร้างประสบการณ์ Interactive ที่สนุกจริงๆ เป็นพื้นฐานที่ยอดเยี่ยมสำหรับใครที่อยากสร้างเครื่องเกมมือถือของตัวเอง หรือระบบควบคุมเทพๆ ในอนาคต สู้งานนะน้อง!