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 ก็ได้นะ
รายละเอียดทางเทคนิคเพิ่มเติม
- การต่อสาย (Wiring): ต่อสายจาก Joystick และปุ่มกดไปยังขา Digital และ Analog ของบอร์ด สำหรับปุ่มกด ให้ต่อด้านหนึ่งไปที่ขา Digital และอีกด้านไปที่ Ground (GND) การใช้
INPUT_PULLUPในโค้ดจะเป็นการเปิดใช้งานตัวต้านทานภายในของไมโครคอนโทรลเลอร์ ทำให้เราไม่ต้องต่อตัวต้านทานภายนอกเพิ่มให้ยุ่งยาก! - การแมปปุ่ม (Mapping): โค้ดจะแปลงตำแหน่งของ Joystick แบบ Analog ให้เป็นการกดปุ่มคีย์บอร์ด ตัวอย่างเช่น เมื่อดัน Joystick ไปข้างหน้า โค้ดอาจจะสั่ง
Keyboard.press('w');(เดินขึ้น) ส่วนการกดปุ่มอื่นอาจจะแมปกับKeyboard.press('SPACE');(กระโดด) - การปล่อยปุ่ม (Release): การเขียน
Keyboard.release();สำหรับแต่ละปุ่ม หรือใช้Keyboard.releaseAll();เมื่อหยุดอินพุตนั้นสำคัญมาก! ถ้าลืม ตัวละครในเกมจะวิ่งไม่หยุด เพราะคอมคิดว่าปุ่มยังถูกกดค้างอยู่!
เล่นได้ลื่น ไม่ต้องลง Driver
เพราะเจ้านี่มันลงทะเบียนตัวเองเป็นคีย์บอร์ดพื้นฐานเลย เราจึงไม่ต้องลง Driver COM port ให้วุ่นวาย หรือโปรแกรมแปลงสัญญาณอย่าง "Joy2Key" บน PC เลย แค่เสียบสาย USB, เปิดเกมบนเบราว์เซอร์ แล้วก็กดปุ่มกระโดดโลด!
การต่อสาย
joystick leonardo GND GND +5v 5v VRX A0 VRY A1 SW D2
รายการอุปกรณ์
- Arduino Leonardo หรือ Arduino Micro (ใช้ Uno/Mega/Nano ไม่ได้ นะ!)
- ปุ่มอาร์เคด Sanwa หรือแบบทั่วไป
- โมดูล Analog Joystick
- กล่องกระดาษแข็งหนา หรือแผ่นไม้ MDF สำหรับติดปุ่มหนักๆ ไว้