Есть ли ошибка в команде motor.run_target? - PullRequest
0 голосов
/ 03 июля 2019

MicroPython 1.0.0, ev3dev Linux echo 4.14.96-ev3dev-2.3.2-ev3 # 1 ПРЕДИСЛОВИЕ Вс 27 января 21:27:35 CST 2019 armv5tejl GNU / Linux

#!/usr/bin/env pybricks-micropython
from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port, Stop
from pybricks.tools import print, wait

leftMotor = Motor(Port.B)
rightMotor = Motor(Port.C)

# speed range -100 to 100

def leftWheel():
    leftMotor.run_target(50, 360, Stop.COAST, True)

def rightWheel():
    rightMotor.run_target(50, -360, Stop.COAST, True)

leftWheel()
rightWheel()

Это работаетесли я использую True, то он запускается влево, затем вправо.Но если я установил это значение false, это ничего не даст.[должен работать как параллельно]

1 Ответ

1 голос
/ 05 июля 2019

Когда вы выбираете wait=False, запускается команда run_target, и ваша программа сразу же продолжает работу с остальной частью вашей программы.Мотор завершает свою команду в фоновом режиме.

Но если в вашей программе больше ничего нет, программа сразу завершается.И когда программа заканчивается, двигатели останавливаются, поэтому вы не видите никакого движения в этом случае.

Вы увидите движение двигателей, если в вашей программе есть что-то еще, например, ожидание:

#!/usr/bin/env pybricks-micropython
from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port, Stop
from pybricks.tools import print, wait

left_motor = Motor(Port.B)
right_motor = Motor(Port.C)

# Initiate the run target commands, without waiting for completion.
left_motor.run_target(50, 360, Stop.COAST, False)
right_motor.run_target(50, -360, Stop.COAST, False)

# Do something else while the motors are moving, like waiting.
wait(10000)

Если ваша цель состоит в том, чтобы подождать, пока оба двигателя не достигнут своей цели, вместо этого вы можете подождать, пока значения angle каждого двигателя не совпадут с заданными вами целями:

#!/usr/bin/env pybricks-micropython
from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port, Stop
from pybricks.tools import print, wait

left_motor = Motor(Port.B)
right_motor = Motor(Port.C)

target_left = 360
target_right = -360
tolerance = 2

left_motor.run_target(50, target_left, Stop.COAST, False)
right_motor.run_target(50, target_right, Stop.COAST, False)

# Wait until both motors have reached their targets up to a desired tolerance.
while abs(left_motor.angle()-target_left) > tolerance or abs(right_motor.angle()-target_right) > tolerance:
   wait(10)

# Make a sound when we're done.
brick.sound.beep()
...