ใช้ 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
ตัวอย่างโปรแกรมที่ทดสอบการใช้งานของทุกปุ่มบน 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