กลับไปหน้ารวมไฟล์
arduino-leonardo-joystick-control-games-4d4727.md

Custom Gamepad: Leonardo USB Joystick

Arduino Leonardo Joystick เนี่ย ไม่ใช่เอามาเล่นเกม บนหน้าจอ Arduino นะจ๊ะ แต่คือเอา Arduino ไปใช้เล่นเกม บนคอมพิวเตอร์ของเรา ต่างหาก! มันแปลงการกดปุ่มไฟฟ้าให้เป็นคำสั่งคีย์บอร์ด USB ง่ายๆ ก็คือสร้าง Fight Stick แบบสั่งทำเองไว้เล่นเกมอย่าง Tekken หรือ Street Fighter นั่นแหละ

หลักการทำงานของ Joystick

เจ้า Joystick นี้ข้างในจะมีตัวต้านทานปรับค่าได้ (Potentiometer) อยู่ 2 ตัว, ปุ่มกด 1 ปุ่ม และฝาครอบ (ไม่ได้อยู่ในรายการหลัก)

ตัวต้านทานปรับค่าได้ (Potentiometer) จะรับกระแสจากขา VCC, ไหลผ่านตัวต้านทาน X/Y แล้วค่อยปล่อยกระแสออกทางขา X / Y

ส่วนปุ่มกดจะรับกระแสจากขา VCC แล้วปล่อยออกผ่านขาปุ่มกด (ของผมคือขา SW)

Human Interface Device (HID) Library

ต้องใช้ Arduino Leonardo หรือ Micro (ATmega32U4) เท่านั้นนะ! โดยการ include library <Keyboard.h> เข้าไป Arduino ก็จะสามารถบอกกับ PC ของเราได้ว่ากำลังกดปุ่มอะไรอยู่

หลักการทำงานของโค้ดผม

ปลายแต่ละด้านของตัวต้านทานปรับค่าได้ x และ y จะพิมพ์ "w", "s", "a", "d" ส่วนการกดปุ่มจะพิมพ์ "Esc"

โค้ดสำหรับปุ่ม:

if (buttonPressed) {
   Keyboard.press(KEY_ESC);
  } else {
    Keyboard.release(KEY_ESC);
  }

จะเปลี่ยน KEY_ESC เป็น space สำหรับเล่น minecraft ก็ได้นะ

รายละเอียดทางเทคนิคเพิ่มเติม

  1. การต่อสาย (Wiring): ต่อสายจาก Joystick และปุ่มกดไปยังขา Digital และ Analog ของบอร์ด สำหรับปุ่มกด ให้ต่อด้านหนึ่งไปที่ขา Digital และอีกด้านไปที่ Ground (GND) การใช้ INPUT_PULLUP ในโค้ดจะเป็นการเปิดใช้งานตัวต้านทานภายในของไมโครคอนโทรลเลอร์ ทำให้เราไม่ต้องต่อตัวต้านทานภายนอกเพิ่มให้ยุ่งยาก!
  2. การแมปปุ่ม (Mapping): โค้ดจะแปลงตำแหน่งของ Joystick แบบ Analog ให้เป็นการกดปุ่มคีย์บอร์ด ตัวอย่างเช่น เมื่อดัน Joystick ไปข้างหน้า โค้ดอาจจะสั่ง Keyboard.press('w'); (เดินขึ้น) ส่วนการกดปุ่มอื่นอาจจะแมปกับ Keyboard.press('SPACE'); (กระโดด)
  3. การปล่อยปุ่ม (Release): การเขียน Keyboard.release(); สำหรับแต่ละปุ่ม หรือใช้ Keyboard.releaseAll(); เมื่อหยุดอินพุตนั้นสำคัญมาก! ถ้าลืม ตัวละครในเกมจะวิ่งไม่หยุด เพราะคอมคิดว่าปุ่มยังถูกกดค้างอยู่!

เล่นได้ลื่น ไม่ต้องลง Driver

เพราะเจ้านี่มันลงทะเบียนตัวเองเป็นคีย์บอร์ดพื้นฐานเลย เราจึงไม่ต้องลง Driver COM port ให้วุ่นวาย หรือโปรแกรมแปลงสัญญาณอย่าง "Joy2Key" บน PC เลย แค่เสียบสาย USB, เปิดเกมบนเบราว์เซอร์ แล้วก็กดปุ่มกระโดดโลด!

การต่อสาย

joystick leonardo GND GND +5v 5v VRX A0 VRY A1 SW D2

joystick wiring
car reversing

รายการอุปกรณ์

  • Arduino Leonardo หรือ Arduino Micro (ใช้ Uno/Mega/Nano ไม่ได้ นะ!)
  • ปุ่มอาร์เคด Sanwa หรือแบบทั่วไป
  • โมดูล Analog Joystick
  • กล่องกระดาษแข็งหนา หรือแผ่นไม้ MDF สำหรับติดปุ่มหนักๆ ไว้

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

apps:
  - "1x  Arduino IDE"
  - "1x poki car game(for testing)"
author: "5121j"
category: "Gadgets, Games & Toys"
components:
  - "1x Grove - Thumb Joystick"
  - "1x Arduino Leonardo"
  - "1x 40 colored male-female jumper wires"
description: "Build an arcade stick! Hook up arcade buttons and a thumbstick to an Arduino Leonardo to play PC emulator games via USB plug-and-play."
difficulty: "Easy"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/a3344158-5e9f-45e0-b563-5ff214cd2c0c.ino"
encryptedPayload: "U2FsdGVkX1+q0M5GgLD5p+Xl/0vxTJlLH2EhnyEo2Ap9tDVtvUT40Bd02mkWSCZvDy+l6HwbjHKAC+R5U++4uM6CwfVz2gbjTk/2Xxv0B68gsH/Rs/WT2mxCaDdvQ+rqLamFtK4uZVNw8230RMAp9Q=="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-leonardo-joystick-control-games-4d4727_cover.jpg"
lang: "en"
likes: 0
passwordHash: "9028f533875ada82853de8c715340008b903e4fbf8e34ffb1dfec423695fd512"
price: 1120
seoDescription: "Control PC games using Arduino Leonardo and a joystick. Map buttons like Esc (pause) for a custom gaming controller experience."
tags:
  - "Tools"
title: "ควบคุมเกมด้วย Arduino Leonardo + Joystick งานง่ายแต่หล่อ!"
tools: []
videoLinks: []
views: 257