【发布时间】:2018-07-27 19:50:47
【问题描述】:
我正在使用 Evdev 读取 A、B、X、Y 的 XBOX ONE 输入,并取得了巨大成功。然而,我正在努力拿起模拟棒输入。任何人都可以帮我编写 Python 代码吗?
我正在尝试控制伺服。
到目前为止,这是我的代码,它“完美”地工作。我需要知道如何读取 (xbox) 操纵杆的输出,这样我才能为伺服系统使用“GPIO.PWM”。
from evdev import InputDevice, categorize, ecodes, KeyEvent
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BOARD)
GPIO.setup(8, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(11, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(12, GPIO.OUT, initial=GPIO.LOW)
gamepad = InputDevice('/dev/input/event2')
#evdev takes care of polling the controller in a loop
for event in gamepad.read_loop():
if event.type == ecodes.EV_KEY:
keyevent = categorize(event)
if keyevent.keystate == KeyEvent.key_down:
if keyevent.keycode[0] == "BTN_A":
print "Button A Pressed"
GPIO.output (8, GPIO.HIGH)
elif keyevent.keycode[0] == "BTN_B":
print "Button B Pressed"
GPIO.output (7, GPIO.HIGH)
elif keyevent.keycode[0] == "BTN_WEST":
print "Button Y Pressed"
GPIO.output (11, GPIO.HIGH)
elif keyevent.keycode[0] == "BTN_NORTH":
print "Button X Pressed"
GPIO.output (12, GPIO.HIGH)
if keyevent.keystate == KeyEvent.key_up:
if keyevent.keycode[0] == "BTN_A":
print "Button A Released"
GPIO.output (8, GPIO.LOW)
elif keyevent.keycode[0] == "BTN_B":
print "Button B Released"
GPIO.output (7, GPIO.LOW)
elif keyevent.keycode[0] == "BTN_WEST":
print "Button Y Released"
GPIO.output (11, GPIO.LOW)
elif keyevent.keycode[0] == "BTN_NORTH":
print "Button X Released"
GPIO.output (12, GPIO.LOW)
【问题讨论】:
-
请提供您当前的代码。
-
@pydude - 谢谢,刚刚添加,我将不胜感激。
-
操纵杆通常是
EV_ABS轴,因此除了KeyEvent,您还必须管理AbsEvent事件。 -
谢谢!生病了现在研究!感谢您为我指明方向:)
-
您好,我这样做并设法获得了一些不错的读数,但它们似乎没有任何模式,将继续在 gamepad.read_loop() 中寻找事件:如果 event.type == 编码.EV_ABS: adam = categorize(event) print adam.event