## Программирование Lego EV3 в TRIKStudio

### Подключение робота

Первое, что необходимо сделать для программирования Lego EV3 – переключить TRIKStudio в режим поддержки Lego EV3. Это делается в окне "Настройки", вкладка "Роботы":

#### Подключение по Bluetooth

Процедура подключения робота Lego EV3 по Bluetooth со стороны компьютера полностью аналогична подключению робота Lego NXT и подробно описана в соответствующем разделе документации для Lego NXT.

#### Подключение по USB

Подключите USB-провод к EV3 и к компьютеру с TRIK Studio, включите EV3. После этого можно загружать программы на робот, никаких дополнительных действий и драйверов не требуется.

### Блоки Lego EV3

Специализированные блоки для Lego EV3 делятся на несколько категорий:

- Действия – блоки, выполняющие какое-либо действие на роботе: включение моторов, проигрывание звука и т.д.
- Ожидания – блоки, ждущие наступления какого-либо события: определённых показаний датчиков, нажатия на кнопку и т.д.
- Рисования на дисплее – блоки, используемые для вывода графики и текста на экран.

#### Действия

Название элемента | Пиктограмма | Описание
Гудок |  | Проиграть на роботе звук с фиксированной частотой. Имеется один параметр — ждать ли завершения проигрывания звука или сразу же перейти к следующему блоку. Допустимые значения — Истина и Ложь.
Играть звук |  | Проиграть на роботе звук с заданной частотой и длительностью. Аналогичен блоку "Гудок", но позволяет задавать параметры звука. Имеется параметр, определяющий, ждать ли завершения проигрывания звука или сразу же перейти к следующему блоку.
Моторы вперёд |  | Включить моторы по заданным портам с заданной мощностью. Порты задаются буквами A, B, C или D, разделенными запятыми. Мощность задаётся в процентах числом от -100 до 100, если задано отрицательное значение, мотор включается в режиме реверса. Так, на картинке изображена команда включения моторов на портах B и C с мощностью 100%. Кроме того, моторы имеют разные режимы работы: режим торможения и режим скольжения (отображаемые красным или зелёным прямоугольником на блоке соответственно). Режимы влияют на то, как двигатель отрабатывает команду — режим торможения стопорит двигатель при отключении, режим скольжения позволяет двигателю прокручиваться по инерции.
Моторы назад |  | Включить моторы в режиме реверса по заданным портам с заданной мощностью. Параметры аналогичны параметрами блока "Моторы вперёд".
Моторы стоп |  | Выключить моторы по заданным портам.
Сбросить показания энкодера |  | Сбросить энкодеры на указанных портах в 0.
Светодиод |  | Включить светодиод с заданным цветом на корпусе робота.

#### Ожидания

Название элемента | Пиктограмма | Описание
Ждать сенсор касания |  | Ждать, пока не сработает датчик касания. Параметром указывается номер порта, к которому подключен датчик. Допустимые значения: 1, 2, 3, 4.
Ждать энкодер |  | Ждать, пока количество оборотов мотора, которые вернул энкодер на заданном порту, не будет сравнимо с указанным в значении параметра "Предел оборотов". Также указывается операция, которая будет использоваться для сравнения с введенным пределом оборотов. Так, при исполнении приведенного блока выполнение программы остановится до тех пор, пока значение, возвращаемое энкодером, не будет больше 40.
Ждать цвет |  | Ждать, пока сенсор цвета на указанном порту в режиме распознавания цветов не вернет указанный цвет.
Ждать интенсивность цвета |  | Ждать, пока значение интенсивности, возвращаемое сенсором цвета на указанном порту в режиме измерения интенсивности, не будет сравнимо с указанным в значении параметра "Интенсивность" (интенсивность задается в процентах, от 0 до 100, меньшие значения соответствуют более тёмным цветам). Также параметром указывается операция, которая будет использоваться для сравнения с введенной интенсивностью. Так, при исполнении приведенного блока выполнение программы остановится до тех пор, пока значение, возвращаемое датчиком, не будет больше 40.
Ждать свет |  | Ждать, пока значение интенсивности, возвращаемое датчиком света на указанном порту, не будет сравнимо с указанным в значении параметра "Проценты" (от 0 до 100, меньшие значения соответствуют тёмному, большие – светлому). Также параметром указывается операция, которая будет использоваться для сравнения с введенными процентами. Так, при исполнении приведенного блока выполнение программы остановится до тех пор, пока значение, возвращаемое датчиком, не будет больше 40.
Ждать сенсор расстояния |  | Ждать, пока расстояние, возвращаемое ультразвуковым или инфракрасным сенсором расстояния, не будет сравнимо с указанным в значении параметра "Расстояние" (расстояние задается в сантиметрах, от 0 до 255). Еще один парамер — номер порта, к которому подключен датчик расстояния. Также параметром указывается операция, которая будет использоваться для сравнения с введенным расстоянием. Так, при исполнении приведенного блока выполнение программы остановится до тех пор, пока значение, возвращаемое датчиком, не будет больше, чем 40 см.
Ждать нажатия кнопки |  | Ждать, пока не будет нажата указанная в качестве параметра кнопка на корпусе робота.

#### Рисование на дисплее

Название элемента | Пиктограмма | Описание
Нарисовать прямоугольник |  | Нарисовать на экране прямоугольник. В качестве параметров указываются координаты левого верхнего угла, ширина и высота прямоугольника, а также заливать его внутреннюю область или нет.
Нарисовать точку |  | Нарисовать на экране точку в указанных координатах.
Нарисовать линию |  | Нарисовать на экране отрезок. В качестве параметров блоку указываются концы отрезка.
Нарисовать круг |  | Нарисовать на экране круг с заданным центром и заданным радиусом, залитый внутри или нет.
Напечатать текст |  | Печатает заданную строку в заданном месте на экране робота. Значение свойства "Текст" по умолчанию трактуется как строка в чистом виде, оно так и будет выведено на экран. Чтобы система считала, что это выражение на текстовом языке (это может быть полезно, например, при отладке значения переменных), поставьте галочку "Вычислять" в редакторе свойств.
Очистить экран |  | Стереть всё, что нарисовано на экране.

Описание блоков, общих для всех конструкторов, можно посмотреть в разделе Создание программ/Создание блоков.

### Сенсорные переменные

Название | Описание
buttonBack, buttonDown, buttonEnter, buttonLeft, buttonRight, buttonUp | Состояние кнопок на корпусе робота: кнопки "Назад", "Вниз", "Ввод", "Влево", "Вправо", "Вверх" соответственно. 0 соответствует ненажатой кнопке, 1 – нажатой.
encoderA, encoderB, encoderC, encoderD | Показания энкодеров на портах A, B, C, D соответственно.
sensor1, sensor2, sensor3, sensor4 | Показания датчиков на портах 1, 2, 3, 4 соответственно.

### Запуск программ

#### Интерпретация по Bluetooth или по USB

Чтобы запустить программу на выполнение, необходимо подключиться к роботу, нажав на кнопку "Подключиться", после чего нажать кнопку "Выполнить" панели "Интерпретатор" или меню "Инструменты":

После этого интерпретатор ищет блок "Начало", с которого и начинается выполнение программы. Если такой блок на диаграмме не найден, будет выдано сообщение об ошибке. Для каждого функционального блока должна существовать ровно одна исходящая связь, по которой выполнение программы перейдет к следующему блоку. В противном случае будет выдано сообщение об ошибке.

Для того, чтобы остановить выполнение программы, нужно нажать кнопку "Прервать выполнение" панели "Интерпретатор" или меню "Инструменты".

#### Прошивка в робота

Загрузка программы на робот позволяет сохранить программу на роботе и исполнять её без соединения с компьютером. В отличие от Lego NXT, средства загрузки и исполнения программ TRIK Studio не требуют дополнительных манипуляций с роботом и работают со стандартной прошивкой. Первое, что нужно сделать, чтобы загрузить программу – переключиться в режим автономного исполнения по Bluetooth или USB (в зависимости от желаемого типа соединения с роботом для загрузки программы).

Далее запустить программу на исполнение очень просто: достаточно нажать на "Запустить программу".

По программе будет сгенерирован код на внутреннем языке EV3, загружен на робот и немедленно запущен на исполнение. Если требуется только загрузить программу, не запуская её, нужно воспользоваться кнопкой "Загрузить программу".

Эксперты в EV3 могут посмотреть на сгенерированный на внутреннем языке EV3 код с помощью кнопки "Сгенерировать в байткод EV3". Теоретически, его можно подредактировать и запустить на исполнение, или вообще использовать для текстового программирования EV3, но делать это неудобно – язык создавался для автоматической генерации, а не написания программ.