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

运行PyFirmata函数时命令提示符卡顿问题求助

问题解决:Python控制Arduino舵机卡在rotate函数

核心问题分析

你的代码里有两个关键问题导致程序卡住:

  1. sleep参数单位错误:time.sleep()的参数单位是秒,你写的sleep(1000)会让程序休眠16分钟以上,这就是迟迟看不到"DONE"的根本原因。
  2. 角度类型不匹配:通过input()获取的是字符串类型,舵机需要的是整数角度值,虽然部分库可能自动转换,但显式转换能避免潜在的类型错误。

另外,使用PyFirmata/PyFirmata2时,建议启动迭代器处理Arduino的通信缓冲区,避免因数据堆积导致的阻塞问题。

修改后的代码

from pyfirmata2 import Arduino, SERVO, util
from time import sleep

port = 'COM4'
pin = 10
board = Arduino(port)

# 启动迭代器处理通信缓冲区,避免阻塞
it = util.Iterator(board)
it.start()

board.digital[pin].mode = SERVO

def rotate(pin, angle):
    board.digital[pin].write(angle)
    sleep(0.5)  # 改成0.5秒,给舵机足够转动时间即可

print('START')
# 将输入的字符串转为整数,符合舵机参数要求
x = int(input('Angle: '))
rotate(pin, x)
print('DONE')

连续输入角度的循环实现

如果要实现连续输入角度的功能,可以参考以下代码:

print('START,输入"quit"退出程序')
while True:
    x_input = input('Angle: ')
    if x_input.lower() == 'quit':
        break
    try:
        x = int(x_input)
        # 限制角度在0-180之间,避免损坏舵机
        if 0 <= x <= 180:
            rotate(pin, x)
            print('DONE')
        else:
            print('请输入0-180之间的角度值')
    except ValueError:
        print('请输入有效数字或"quit"退出')

内容的提问来源于stack exchange,提问作者Sir Narwhal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:23:13