Пример простого управление двумя моторами 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
Поделиться: