Серво делает дополнительный цикл - PullRequest
0 голосов
/ 03 июля 2018

У меня есть два скрипта Python, которые меняют положение двух сервоприводов. Второй скрипт работает как нужно, но когда я запускаю первый, первый серво выполняет дополнительный цикл или вращение, что является проблемой. Вы видите, почему это происходит? (это просто добавленный текст для прохождения проверки длины символа в SO)

Первый скрипт:

from pyfirmata import ArduinoMega, SERVO
from time import sleep

port = '/dev/ttyACM0'
board = ArduinoMega(port)
sleep(5)

board.digital[13].mode = SERVO
board.digital[12].mode = SERVO

def set_first_servo(angle):
    board.digital[13].write(angle)
    sleep(0.015)

def set_second_servo(angle):
    board.digital[12].write(angle)
    sleep(0.015)

a, b = True, True
while a:
    for position in range(135, 0, -1):
        set_first_servo(position)

    a = False

while b:
    for position in range(0, 135):
        set_second_servo(position)

    b = False

board.exit()

И второй скрипт (с этим проблем нет):

from pyfirmata import ArduinoMega, SERVO
from time import sleep

port = '/dev/ttyACM0'
board = ArduinoMega(port)
sleep(5)

board.digital[13].mode = SERVO
board.digital[12].mode = SERVO

def set_first_servo(angle):
    board.digital[13].write(angle)
    sleep(0.015)

def set_second_servo(angle):
    board.digital[12].write(angle)
    sleep(0.015)

c, d = True, True

while c:
    for position in range(0, b):
        set_first_servo(position)
    c = False

while d:
    for position in range(e, 0, -1):
        set_second_servo(position)

    d = False

board.exit()

1 Ответ

0 голосов
/ 03 июля 2018

Возможно, вы хотите перевернуть (135, 0, -1) и (0, 135).

from pyfirmata import ArduinoMega, SERVO
from time import sleep

port = '/dev/ttyACM0'
board = ArduinoMega(port)
sleep(5)

board.digital[13].mode = SERVO
board.digital[12].mode = SERVO

def set_first_servo(angle):
    board.digital[13].write(angle)
    sleep(0.015)

def set_second_servo(angle):
    board.digital[12].write(angle)
    sleep(0.015)

a, b = True, True
while a:
    for position in range(0, 135):
        set_first_servo(position)

    a = False

while b:
    for position in range(135, 0, -1):
        set_second_servo(position)

    b = False

board.exit()

Предполагая, что ваш второй работает, это будет единственное отличие, которое я вижу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...