如何通过PyFirmata使用Arduino摇杆按键?读取异常求助
问题解决:PyFirmata读取摇杆按键始终返回1
你的问题出在引脚模式没有正确配置,以及对PyFirmata操作数字引脚的方式理解有误。以下是具体的解决步骤:
核心问题分析
- 直接使用
board.digital[3]操作引脚时,PyFirmata默认不会明确设置引脚为输入模式,导致读取的电平状态异常。 - 摇杆按键通常是按下时接地,需要启用Arduino的内部上拉电阻才能正确检测(按下时返回0,松开时返回1)。你之前的
joystick_switch.write(1)试图启用上拉,但因为引脚模式没设对,所以没生效。
修复后的代码
from pyfirmata import Arduino from pyfirmata.util import Iterator import time # Setup try: board = Arduino('COM6') iterator = Iterator(board) iterator.start() print("Successfully Connected to Arduino Board") except: print("ERROR: Could Not Connect to Arduino Board") board = None exit() joystick_x = board.get_pin("a:0:i") joystick_y = board.get_pin("a:1:i") # 用get_pin明确设置数字3引脚为输入模式 joystick_switch = board.get_pin("d:3:i") dt = 0.1 val_x, val_y, val_s = .5, .5, 0 # 启用内部上拉电阻(输入模式下write(1)就是开启上拉) joystick_switch.write(1) while True: time.sleep(dt) val_x = joystick_x.read() val_y = joystick_y.read() val_s = joystick_switch.read() print(val_s)
关键修改说明
- 用
board.get_pin("d:3:i")替代board.digital[3]:明确指定引脚3为数字输入模式,这是PyFirmata中正确配置引脚的标准方式。 - 启用内部上拉:摇杆按键按下时会把引脚拉低到GND,开启上拉后,松开按键时引脚保持高电平(返回1),按下时返回0,这样就能正确检测按键状态。
你之前用C测试正常,是因为C中会用pinMode(3, INPUT_PULLUP)明确设置输入上拉,而PyFirmata需要通过get_pin指定输入模式后,再用write(1)实现同样的效果。
内容的提问来源于stack exchange,提问作者Amadou Traore
相关产品推荐
相关产品推荐

