PyFirmata舵机控制问题(Arduino与Python)
我正在尝试用PyFirmata2控制我的舵机(使用Arduino Nano)。它有时候能正常工作,但有时候会在随机的角度停下来。为什么结果不一致,不能可靠呢?
使用延迟和不使用延迟的结果是一样的。
有没有人能帮我解决这个问题?或者直接换用PySerial可行吗?
PYTHON代码:
import pyfirmata2
from pyfirmata2 import Arduino
import time
board= Arduino("COM14")
iter8 = pyfirmata2.util.Iterator(board)
iter8.start()
servo_pinX = board.get_pin('d:9:s') #Servo-x to pin 9
servo_pinY = board.get_pin('d:10:s') #Servo-y to pin 10
def move_servoX():
servo_pinX.write(servoPos[0])
time.sleep(0.2)
def move_servoY():
servo_pinY.write(servoPos[1])
time.sleep(0.2)
servoPos = [18.0,42.0]
move_servoX()
move_servoY()
servoPos = [93.0,0.0]
move_servoX()
move_servoY()
servoPos = [89.0,100.0]
move_servoX()
move_servoY()
servoPos = [8.0,170.0]
move_servoX()
move_servoY()
servoPos = [3.0,83.0]
move_servoX()
move_servoY()
servoPos = [149.0,0.0]
move_servoX()
move_servoY()
servoPos = [90.0,90.0]
move_servoX()
move_servoY()
board.exit()
我希望舵机能对所有指令做出反应,但它只对前几个角度有效,然后就停了 :(
提前谢谢大家!!
1 个回答
0
我不知道你为什么要这样写你的代码,但我建议你可以试试下面的方法。
看看pyfirmata2库里的伺服电机示例,尽量按照那个示例来写。你可以在这里找到它:https://github.com/berndporr/pyFirmata2/blob/master/examples/servo.py
我觉得你调用board.digital[9].write(10)
这行代码有点奇怪,尤其是因为那个示例的结果应该是这样的:
servo_5 = board.get_pin('d:5:s')
v = 90.0 # example value
# Set the duty cycle
servo_5.write(v)