我对 python 相当陌生,正在尝试创建一个自定义模块,我可以使用 evdev 为我的树莓派导入该模块(不是那么重要)。我的问题是我需要一个好方法来知道何时按下给定按钮,最好使用 True/False。如果我要导入此模块并使用 read_stream() 函数,那么能够收集多种类型的输入的最简单方法是什么。(只是为了澄清,gamepad.read_loop() 每次迭代只返回一个值。
from evdev import InputDevice, categorize, ecodes
aBtn = 304
bBtn = 305
xBtn = 307
yBtn = 308
LBmper = 310
RBmper = 311
MenuBtn = 315
WindowBtn = 314
XboxBtn = 316
HorizontalDp = 16
VerticalDp = 17
RightT = 5
LeftT = 2
LeftStickClick = 317
RightStickClick = 318
Ls_X = 0
Ls_Y = 1
Rs_X = 3
Rs_Y = 4
def read_stream(input_path, trigger_deadzone):
'''Begins the loop that reads all of the incoming events.'''
button_list = ['aBtn_pressed', 'bBtn_pressed', 'xBtn_pressed', 'yBtn_pressed', 'lBmper_pressed', 'rBmper_pressed', 'mBtn_pressed', 'wBtn_pressed', 'xbxBtn_pressed', 'rDp_pressed', 'lDp_pressed', 'dDp_pressed', 'uDp_pressed', 'Ls_clicked', 'Rs_clicked', 'Ls_right', 'Ls_left', 'Ls_down', 'Ls_up', 'Rs_right', 'Rs_left', 'Rs_down', 'Rs_up', 'Lt_custom', 'Rt_custom']
for button in button_list:
button = False
gamepad = InputDevice(input_path)
if (not "Microsoft X-Box One S pad" in str(gamepad)):
raise Exception("Invalid input device, please make sure you are using an Xbox One S controller.\nAlso make sure that the correct input path is set.")
print("Stream is reading: ", gamepad)
for event in gamepad.read_loop():
value = event.value
code = event.code
if (code == aBtn):
#if (304 <= code <= 308):
if (code == aBtn):
if (value == 1):
aBtn_pressed = True
else:
aBtn_pressed = False
elif (code == bBtn):
if (value == 1):
bBtn_pressed = True
else:
bBtn_pressed = False
elif (code == xBtn):
if (value == 1):
xBtn_pressed = True
else:
xBtn_pressed = False
else:
if (value == 1):
yBtn_pressed = True
else:
yBtn_pressed = False
else:
print("Unfiltered stream input.")