Добавить в корзинуПозвонить
Найти в Дзене

mBot2 #28. Запуск программ по номеру на дисплее. Комментарии и новые премудрости)).

Одной из очень востребованных возможностей, которые предоставляет mBot2 со своим удобным экраном, джойстиком и кнопками, является возможность выбора программ для запуска из некоторого списка, подготовленного пользователем. Например, такая возможность жизненно необходима при выполнении задач олимпиады ЦПМ (https://mosrobotics.ru/activity/ocpm/). Вопросам решения задач данной, весьма интересной олимпиады, посвящена классная группа в Телеграмме "mBot2 - Олимпиада ЦПМ", затеянная в свое время Александром Черновым, по моему мнению - ведущим специалистом в данной области. По сути, в этой статье я также буду использовать наработки, навеянные именно решениями из данной группы. Присоединяйтесь. Правда, это не совсем просто, т.к. группа закрытая, но вы вполне можете присоединится к чату MakeBlock - https://t.me/makeblockchat и уже оттуда попросится в группу "mBot2 - Олимпиада ЦПМ"))) Итак, робот должен выполнять некоторый набор программ, перечень которых и содержание определяется условиями с
Оглавление

Одной из очень востребованных возможностей, которые предоставляет mBot2 со своим удобным экраном, джойстиком и кнопками, является возможность выбора программ для запуска из некоторого списка, подготовленного пользователем. Например, такая возможность жизненно необходима при выполнении задач олимпиады ЦПМ (https://mosrobotics.ru/activity/ocpm/). Вопросам решения задач данной, весьма интересной олимпиады, посвящена классная группа в Телеграмме "mBot2 - Олимпиада ЦПМ", затеянная в свое время Александром Черновым, по моему мнению - ведущим специалистом в данной области. По сути, в этой статье я также буду использовать наработки, навеянные именно решениями из данной группы. Присоединяйтесь. Правда, это не совсем просто, т.к. группа закрытая, но вы вполне можете присоединится к чату MakeBlock - https://t.me/makeblockchat и уже оттуда попросится в группу "mBot2 - Олимпиада ЦПМ")))

Постановка задачи

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

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

Если программ немного, можно ограничится одним блоком с выбором программ. Если больше 6, например, штук 12, то имеет смысл развести по нескольким скриптам с одинаковой "шапкой", управляющим блоком

В нашем примере минипрограмм будет всего 3, так что хватит одного блока.

1 минипрограмма: Робот должен ехать прямо t секунд и остановится. Время задается пользователем по полученным от судей материалам.

2 минипрограмма: Робот должен ехать назад t секунд, остановится, ехать вперед t секунд. Время задается пользователем по полученным от судей материалам.

3 минипрограмма: Робот должен определить расстояние до объекта, расположенного перед ним и показать это расстояние на экране

Комментарии к программе

Постепенно растет сложность выполняемых нашим роботом программ, так что хотелось бы использовать комментарии, как и в случае текстового кода. Для этого удобно воспользоваться расширением Comment. Автор этого замечательного расширения - Александр Чернов, преподаватель робототехники из Москвы, программист, понимающий важность комментариев при создании программ.

-2

Это расширение содержит всего один блок и позволяет удобно комментировать программные действия.

Основной скрипт программы.

-3

Посмотрите, в общем все должно быть вполне понятно.

Мы создаем переменную k для определения номера минипрограммы, которую хотим запустить и t для информации о времени выполнения. Так же создаем 3 своих блока - подпрограммы, Task_1 ... Task_3, в которых и определим действия минипрограмм.

По сути, можно было обойтись без конструкции

-4

и просто отображать k, но так удобнее и интереснее.

Суть заданий видна в комментариях, удобно ориентироваться.

Задаем k с помощью джойстика

Управлять величиной k будем с помощью движения джойстика. Вверх - увеличиваем на 1, вниз - уменьшаем.

Набор скриптов:

-5

Далее разберем минипрограммы:

1 минипрограмма: Робот должен ехать прямо t секунд и остановится.

-6

Реализовать можно разными способами. Один из простейших - используем готовый блок "двигаться вперед .. на скорости ... определенное время". Здесь можно не добавлять блок остановки мотора, сам исходный блок работает так, что по истечении заданного времени моторы остановятся.

Заодно потренируемся в выводе информации.

2 минипрограмма: Робот должен ехать назад t секунд, остановится, ехать вперед t секунд.

-7

В целом, блок "подождать (0,4) сек" можно не использовать, т.к. моторы и так остановятся. Но привычка... Дать немного времени перед сменой движения, чтобы моторы не напрягать излишне.

3 минипрограмма: Робот должен определить расстояние до объекта, расположенного перед ним и показать это расстояние на экране.

-8

В данном случае мы используем не одно, а 1000 измерений, выводя на экран среднее арифметическое, тем самым повышая точность измерения. Прием подсмотрен у Александра Чернова, и весьма полезен. Для реализации создается несколько новых переменных.

В данном скрипте вариант для штатного дальномера нового образца (в пластике, с подсветкой).

Тестирование минипрограмм.

Перед демонстрацией готового решения стоит проверить каждую минипрограмму на предмет правильной работоспособности. Сделать это можно, например так, используя кнопку B и меняя минипрограмму для проверки.

-9

Демонстрация

Все, можно пробовать общую программу на выполнение.

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

Запускаем на выполнение кнопкой А. После первой минипрограммы k становится равным 2, так что новым нажатием А мы запустим 2 минипрограмму. А далее k=3, ставим перед роботом предмет, жмем А, получаем расстояние до предмета.

В любой момент мы можем изменить k с помощью джойстика и запустить соответствующую минипрограмму.

Пример выполнения задачи 3:

-10
-11

Ранее в цикле: