You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PyFirmata使用Arduino摇杆按键?读取异常求助

问题解决:PyFirmata读取摇杆按键始终返回1

你的问题出在引脚模式没有正确配置,以及对PyFirmata操作数字引脚的方式理解有误。以下是具体的解决步骤:

核心问题分析

  1. 直接使用board.digital[3]操作引脚时,PyFirmata默认不会明确设置引脚为输入模式,导致读取的电平状态异常。
  2. 摇杆按键通常是按下时接地,需要启用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:39:22