กลับไปหน้ารวมไฟล์
pong-game-for-2-players-2e30f5.md

ชื่อโปรเจกต์: เกม Pong สำหรับ 2 คน! (จัดไปวัยรุ่น)

ไงไอ้น้อง!

เคยเล่นเกม Pong ในคอมหรือพวกตู้เกมสมัยก่อนป่ะ? โปรเจกต์นี้แหละ คือเกมนั้นเลยแบบเป๊ะๆ

ไอเดียมันเริ่มจากงี้...

พี่ไปนั่งหาพวกเกม Pong ที่ใช้ [Arduino](https://s.shopee.co.th/7fUgFAWSki) กับ [OLED](https://s.shopee.co.th/5fjbrJWyFb) Display มา แล้วก็ไปเจอตัวนึงเข้า ตามนี้เลย:

The original pong game (Credits:"Pong with Oled SSD1306, joystick and [buzzer](https://s.shopee.co.th/6pvZFdZdRf)!" from wotblitza")

เห้ย มันเจ๋งดีว่ะ แต่มันเล่นได้แค่คนเดียวไง พี่เลยจัดให้ใหม่แบบเล่นได้ 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) ตามนี้เลย:

  1. Input Acquisition: Arduino จะคอยเช็กค่าจาก Joystick ทั้งสองตัวพร้อมกันด้วยคำสั่ง analogRead() แล้ว Map ค่า (0-1023) ให้กลายเป็นพิกัดแนวตั้งบนหน้าจอ (0-63)
  2. Paddle Update: อัปเดตตำแหน่งไม้ตีทั้งสองอันลงใน Buffer ของหน้าจอ
  3. Ball Physics:
    • ลูกบอลจะมีพิกัด X, Y และค่าความเร็ว vX, vY (Velocity)
    • ทุกๆ Frame ตำแหน่งจะเปลี่ยนไปตามความเร็ว (Position = Position + Velocity)
    • Collision Detection (การตรวจจับการชน): ถ้าพิกัดลูกบอลไปทับกับขอบของไม้ตีปุ๊บ เราจะกลับทิศทาง vX ทันที พร้อมสั่งให้ Buzzer ทำงาน
  4. Scoring: ถ้าลูกบอลหลุดขอบซ้ายหรือขวา ฝ่ายตรงข้ามจะได้แต้มทันที แล้วระบบจะอัปเดตคะแนน พร้อมกับ Reset บอลกลับไปที่จุดกึ่งกลาง
  5. Rendering: ส่งข้อมูลสถานะเกมที่คำนวณเสร็จแล้วทั้งหมดไปแสดงผลบนจอ OLED เป็นกราฟิกแบบลื่นๆ

ทำแล้วได้อะไร? (นอกจากความหล่อเท่)

การสร้างเกม Pong นี้ถือเป็นบทเรียนชั้นยอดเรื่องการออกแบบ Graphical User Interface (GUI), การจัดการ Input แบบ Real-time และความรู้เรื่อง Collision Geometry (เรขาคณิตการชน) น้องจะได้เรียนรู้วิธีจัดการ Hardware หลายๆ เลเยอร์พร้อมกัน ทั้งจอแสดงผล, เสียง และ Analog Input เพื่อสร้างประสบการณ์ Interactive ที่สนุกจริงๆ เป็นพื้นฐานที่ยอดเยี่ยมสำหรับใครที่อยากสร้างเครื่องเกมมือถือของตัวเอง หรือระบบควบคุมเทพๆ ในอนาคต สู้งานนะน้อง!

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

title: "Pong Game for 2 Players!"
description: "The pong game for two players using I2c OLED Display and Arduino"
author: "bruno_opaiva"
category: "Gadgets, Games & Toys"
tags:
  - "game"
  - "buzzer"
  - "display"
  - "oled"
  - "fun"
  - "joystick"
views: 36829
likes: 8
price: 699
difficulty: "Intermediate"
components:
  - "1x USB-A to B Cable"
  - "2x Analog joystick (Generic)"
  - "1x Solderless Breadboard Full Size"
  - "10x Jumper wires (generic)"
  - "1x Gravity I2C OLED-2864 Display"
  - "8x Male/Female Jumper Wires"
  - "1x Buzzer"
  - "1x Arduino UNO"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "9ee03457f93e99253d803250249c1726b615a562aea56714f8a74a42dd6f1c79"
encryptedPayload: "U2FsdGVkX18TcL0f60eLZOMI+JUGz4gWR7/CcFWDyMbF/ZAmhHXc9FDuyZJd8mGr9h8T3ClRxTwU0Mnk9fDaxQ=="
seoDescription: "Build a 2-player Pong Game using Arduino and I2c OLED Display. A simple and fun DIY electronics project for beginners."
videoLinks:
  - "https://www.youtube.com/watch?v=WZ7fkewJvoo"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/pong-game-for-2-players-2e30f5_cover.jpg"
lang: "th"