ใช้ xbox 360 controller กับ Python

พอดีว่าจะลองใช้อุปกรณ์พวก gamepad มาควบคุมการทำงานของโปรแกรมที่ทำงานบน Linux อาจจะใช้ PC หรือ Pi ค่อยดูอีกที ภาษาหลักที่จะเอามาใช้งานคงเป็น python ลองหาวิธีดูก็พบว่าที 2 ทางเลือกที่ดูดี คือใช้ Module inputs หรือใช้โมดูล xbox360controller ซึ่ง xbox360controller ดูจะเรียกใช้ง่ายกว่า เพราะมี eventloop และ callback มาให้เลย

ลองกับ gamepad ตัวนี้ (Signo GP-690) เมื่อเสียบกับเครื่องคอมพิวเตอร์จะเห็นเป็น Xbox 360 Controller รีวิว https://www.youtube.com/watch?v=Edf8XsGBNJI

signo controller

ตัวอย่างโปรแกรมที่ทดสอบการใช้งานของทุกปุ่มบน gamepad

import signal
from xbox360controller import Xbox360Controller
def on_button_pressed(button):
    print('Button {0} was pressed'.format(button.name))
def on_button_released(button):
    print('Button {0} was released'.format(button.name))
def on_axis_moved(axis):
    print('Axis {0} moved to {1} {2}'.format(axis.name, axis.x, axis.y))
def on_trigger_moved(axis):
    print('Axis {0} moved to {1}'.format(axis.name, axis.value))
try:
    with Xbox360Controller(0, axis_threshold=0.2) as controller:
        # Button A events
        controller.button_a.when_pressed = on_button_pressed
        controller.button_a.when_released = on_button_released
        # Button B events
        controller.button_b.when_pressed = on_button_pressed
        # Button X events
        controller.button_x.when_pressed = on_button_pressed
        # Button Y events
        controller.button_y.when_pressed = on_button_pressed
        # Button L trigger events
        controller.button_trigger_l.when_pressed = on_button_pressed
        # Button R trigger events
        controller.button_trigger_r.when_pressed = on_button_pressed
        # Button select events
        controller.button_select.when_pressed = on_button_pressed
        # Button start events
        controller.button_start.when_pressed = on_button_pressed
        # Button L thumb events
        controller.button_thumb_l.when_pressed = on_button_pressed
        # Button R thumb events
        controller.button_thumb_r.when_pressed = on_button_pressed
        # Left and right axis move event
        controller.axis_l.when_moved = on_axis_moved
        controller.axis_r.when_moved = on_axis_moved
        # hat axis move event
        # DPAD [
        #    Left -1 0
        #    Right 1 0
        #    Up    0 1
        #    Down  0 -1
        # ]
        controller.hat.when_moved = on_axis_moved
        
        # Left and Right trigger axis move event
        controller.trigger_l.when_moved = on_trigger_moved
        controller.trigger_r.when_moved = on_trigger_moved
        signal.pause()
except KeyboardInterrupt:
    pass
print("bye.")

รายชื่อปุ่มต่างๆ ที่เรียกใช้งานได้

>>> controller.info()
Microsoft X-Box 360 pad at index 0
Axes: 5
     axis_l
     axis_r
     hat
     trigger_l
     trigger_r
Buttons: 11
     button_a
     button_b
     button_x
     button_y
     button_trigger_l
     button_trigger_r
     button_select
     button_start
     button_mode
     button_thumb_l
     button_thumb_r
Rumble: yes
Driver version: 2.1.0 1.0.1