运行PyFirmata函数时命令提示符卡顿问题求助
问题解决:Python控制Arduino舵机卡在rotate函数
核心问题分析
你的代码里有两个关键问题导致程序卡住:
- sleep参数单位错误:
time.sleep()的参数单位是秒,你写的sleep(1000)会让程序休眠16分钟以上,这就是迟迟看不到"DONE"的根本原因。 - 角度类型不匹配:通过
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
相关产品推荐
相关产品推荐

