我已经将一个模拟操纵杆连接到我的树莓PI 3B上,我试图让上下左右移动映射到W A S D.代码如下:

#!/usr/bin/env python3

import RPi.GPIO as GPIO
import ADC0834
import time
from pynput.keyboard import Key, Controller

BtnPin = 22

def setup():
    # Set the GPIO modes to BCM Numbering
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    ADC0834.setup()

def destroy():
    # Release resource
    GPIO.cleanup()

def loop():
    keyboard = Controller()
    while True:
        x_val = ADC0834.getResult(0)
        y_val = ADC0834.getResult(1)
        Btn_val = GPIO.input(BtnPin)
    # Map joystick input to keyboard keys
        if y_val < 127:
            keyboard.press(Key.W)
            keyboard.release(Key.W)
        elif y_val > 127:
            keyboard.press(Key.S)
            keyboard.release(Key.S)
        if x_val < 131:
            keyboard.press(Key.A)
            keyboard.release(Key.A)
        elif x_val > 131:
            keyboard.press(Key.D)
            keyboard.release(Key.D)
    
    time.sleep(0.2)


if __name__ == '__main__':
    setup()
    try:
        loop()
    except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the program destroy() will be executed.
        destroy()
        
    

当代码从终端运行时,我收到以下错误消息:

Traceback (most recent call last):
  File "/home/pi/Joystick.py", line 46, in <module>
    loop()
  File "/home/pi/Joystick.py", line 31, in loop
    keyboard.press(Key.S)
  File "/usr/lib/python3.9/enum.py", line 405, in __getattr__
    raise AttributeError(name) from None
AttributeError: S

我已经通过sudo pip3 install pynput下载了库pynput,并且我还try 在代码中转换W A S D的大小写.模拟输出也能正常工作.我只是想不出如何正确地映射到W A S D.任何帮助都是附属品.

推荐答案

Key对象不具有S等普通字母的属性.

如果您想按普通字母键,请使用以下命令:

keyboard.press('S')
keyboard.release('S')

Python相关问答推荐

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

Select 用a和i标签包裹的复选框?

. str.替换pandas.series的方法未按预期工作

使用索引列表列表对列进行切片并获取行方向的向量长度

scikit-learn导入无法导入名称METRIC_MAPPING64'

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

如何在python polars中停止otherate(),当使用when()表达式时?

当独立的网络调用不应该互相阻塞时,'

实现自定义QWidgets作为QTimeEdit的弹出窗口

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

如何在表中添加重复的列?

如何使regex代码只适用于空的目标单元格

Matplotlib中的字体权重

Polars将相同的自定义函数应用于组中的多个列,

导入错误:无法导入名称';操作';

Pandas:填充行并删除重复项,但保留不同的值

BeautifulSoup:超过24个字符(从a到z)的迭代失败:降低了首次深入了解数据集的复杂性:

ModuleNotFoundError:Python中没有名为google的模块''

分解polars DataFrame列而不重复其他列值

与同步和异步客户端兼容的Python函数