• Многозадачная работа допускает совершение нескольких ошибок одновременно.

Простое управление двумя моторами Lego EV3

Пример простого управление двумя моторами Lego EV3. Буквой имени порта обозначается мотор, подключенный к порту с этим именем.

Простое управление двумя моторами, подключенными к портам B и С.

Если вы случайно подключите моторы не в том порядке, они будут вращаться в направлениях, противоположных желаемым. В этом случае просто измените знаки у значений скорости вызываемых методов.

Вы можете скопировать указанный ниже код в IDE MS Small Basic с установленной библиотекой EV3 и подключенным блоком Lego EV3 и запустить:

Motor.Move ("B", 50, 360, "True") ' Робот поворачивает направо используя мотор B, включенный на 50% скорости на угол 360°, затем тормозит

Program.Delay(2000) ' Пауза 2 секунды (2000 миллисекунд)



Motor.Move ("BC", 30, 720, "True") ' Робот движется вперед на 30% скорости на два оборота моторов (720°), затем тормозит. Оба мотора вращаются одинаково.

Program.Delay(2000) ' Пауза 2 секунды



Motor.Schedule("BC", 60, 360, 720, 1080, "True") ' Разгоняем робота за один оборот моторов, затем поддерживаем скорость 60% в течении двух оборотов (720°), затем замедляемся за три оборота (1080°) до остановки и тормозим

Motor.Wait ("BC") ' Так как методы Schedule не ждут, пока моторы отработают команды, то для ожидания их выполнения в программе можно использовать Motor.Wait()

Program.Delay(2000) ' Пауза 2 секунды



Motor.MoveSync("BC", 50, -60, 215, "True") ' Мотор B вращается со скоростью 50%, а мотор C - со скоростью -60% (в обратном направлении). На 215 градусов повернётся мотор С, т.к. его скорость больше.

' Для разворота робота на месте скорости моторов должны быть равны по значению, но противоположны по знаку.

Program.Delay(2000)



' Проезжаем по квадрату с закруглёнными углами (так как поворот выполняется только одним мотором)

' Возможно, придется изменить угол вращения моторов (430°) в зависимости от конструкции робота так, чтобы робот поворачивал именно на 90°

For i=1 to 4

    Motor.Move ("BC", 40, 720, "True") ' едем вперёд

    Motor.Move ("B", 40, 430, "True") ' поворачиваем на 90°

EndFor

Program.Delay(2000)



' Проезжаем по квадрату с прямыми углами (робот разворачивается на месте - для этого оба мотора вращаются в противоположных направлениях)

For i=1 to 4

    Motor.Move ("BC", 40, 720, "True") ' едем вперёд

    Motor.MoveSync("BC", 40, -40, 215, "True") ' разворачиваемся на 90°

EndFor



' Проезжаем по правильному многоугольнику, число сторон которого вводит пользователь в текстовом окне на компьютере. Отключать блок EV3 от компьютера - нельзя (программа выполняется на компьютере, а не в блоке)!

Textwindow.Write ("Введите число сторон многоугольника (целое число): ")

sides = textwindow.ReadNumber() ' считали введённое число

' Воспользуемся результатами предыдущих экспериментов

degree = 430 / 2 * 4 / sides ' Если при повороте только одного колеса на 430° (у вас - может быть другое значение) робот поворачивал на 90°, то при развороте двумя колёсами это значение должно быть в 2 раза меньше, теперь считаем, на сколько должно повернуться каждое колесо для разворота на 360° (90 * 4 = 360). Получившееся значение делим на количество сторон (и углов) правильного многоугольника (после завершения фигуры робот должен оказаться в точке начала повёрнутым в первоначальном направлении)

For i=1 to sides

    Motor.Move("BC", 50, 720, "True") ' проезжаем вперёд

    Program.Delay(500)

    Motor.MoveSync("BC", 20, -20, degree, "True") ' разворачиваемся на вычисленный угол

    Program.Delay(500)

EndFor



Поделиться: