Почему эта функция класса не выполняется? [закрыто]Python

Программы на Python
Ответить
Anonymous
 Почему эта функция класса не выполняется? [закрыто]

Сообщение Anonymous »

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

Код: Выделить всё

FORWARD = "forward"
REVERSE = "reverse"
class setup_motor():
def __init__(self, motor, direction):
self.motor = motor
self.direction = direction
self.full_executed = False
self.half_executed = False

def push_down(self, degrees, time_after_start, length):
time_elapsed = time.time() - start_time
if time_elapsed > time_after_start and not self.half_executed:
# spin motor
self.half_executed = True
elif time_elapsed > time_after_start + length and not self.full_executed:
# spin motor
self.full_executed = True
После этого у меня есть один раздел, где двигатели вращаются в следующем порядке:

Код: Выделить всё

L3.push_down(pressed_degrees, 1*multiplier, 0.1*multiplier)
L2.push_down(pressed_degrees, 1*multiplier, 0.1*multiplier)
L1.push_down(pressed_degrees, 1*multiplier, 0.1*multiplier)
Почему вращается только L2? Остальные 2 пропускаются.
Они создаются следующим образом:

Код: Выделить всё

L1 = setup_motor("L1", FORWARD)
L2 = setup_motor("L2", REVERSE)
L3 = setup_motor("L3", FORWARD)
Я знаю, что прямое/обратное направление отличается, но не уверен, какое это имеет значение. -особенно потому, что это работает в других случаях сценария.
start_time — это просто время запуска сценария.

Код: Выделить всё

start_time = time.time() #start of script time
Я знаю, что он пропускает остальные два, потому что я изменил его, чтобы он выводил значения на терминал.
Он выводит:

Код: Выделить всё

Motor: L1, time after start: 0, length: 0.3
Time: 0.002918720245361328
Motor: L1, time after start: 0, length: 0.3
Time: 0.30016064643859863

Motor: L3, time after start: 0.6, length: 0.2
Time: 0.6007165908813477
Motor: L3, time after start: 0.6, length: 0.2
Time: 0.8000619411468506

Motor: L2, time after start: 1, length: 0.1
Time: 1.0007250308990479
Motor: L2, time after start: 1, length: 0.1
Time: 1.1002442836761475
Это выводит значения как при движении вниз, так и вверх.
Цикл выглядит следующим образом (те, у которых есть #skiped, — это те, которые не выполняются — см. вывод ):

Код: Выделить всё

multiplier = 1
while True:
#motor_name.pushdown(degrees, time after start of script, length)
L1.push_down(pressed_degrees, 0*multiplier, 0.3*multiplier)
L1.push_down(pressed_degrees, 0.5*multiplier, 0.1*multiplier) #skipped
L3.push_down(pressed_degrees, 0.6*multiplier, 0.2*multiplier)

L3.push_down(pressed_degrees, 1*multiplier, 0.1*multiplier) #skipped
L2.push_down(pressed_degrees, 1*multiplier, 0.1*multiplier)
L1.push_down(pressed_degrees, 1*multiplier, 0.1*multiplier) #skipped
Я знаю, что их пропускают. Результат странный; Я спрашиваю, знает ли кто-нибудь, почему.

Подробнее здесь: https://stackoverflow.com/questions/793 ... g-executed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»