Беларусь, Минск, БГПУ им. М.Танка |
Ветвление в NXT-G
Кроме последовательного и циклического исполнения команд язык NXT-G предусматривает ветвление. Его можно осуществить при помощи оператора Switch, который проверяет логическое условие и пускает программу по одной из двух (или более) ветвей.
В NXT-G оператор ветвления используется реже, чем в обычных языках программирования, из-за наличия удобного оператора Wait. Однако в ряде случаев его применение необходимо.
Пример 5.1. Робот должен начать движение после нажатия на оранжевую кнопку Start. Если датчик цвета оказывается над красным объектом, то робот должен сказать "Red" и остановиться, а программа - завершиться. Иначе робот должен перемещаться и говорить: "Detect".
Решение выглядит примерно так (обратите внимание на настройку блока Switch).
Самый первый блок Wait в этой программе позволяет запустить робот кнопкой Start на блоке.
Робот может говорить при помощи блока Sound. Его настройки приведены на Рис. 5.2. Блок Sound во второй ветке настраивается аналогично.
В настройке блока Sound обратите внимание на флажок Wait for completion. Если он установлен, то вначале проигрывается заданный звук, и только потом управление переходит к следующему блоку. Если же флажок снять, то включается звук, после чего управление немедленно переходит к следующему блоку.
В конце бесконечного цикла стоит задержка на 0,1 с.
Итак, в поле Control блока Switch может быть один из двух вариантов:
- Sensor - поведение робота зависит от логического условия, связанного с текущими значениями сенсора;
- Value - поведение робота зависит от результата сравнения числового, текстового или логического значения, поступившего извне, с заданным значением.
В поле Display флажок Flat view позволяет включить полное отображение блока Switch (с двумя ветвями) или отключить его. В последнем случае обе ветви отображаются в виде вкладок, причём в данный момент видна только одна из них (Рис. 5.3). Вкладка, помеченная "птичкой", соответствует ветке, по которой пойдёт программа в случае, если проверяемое условие истинно, а вкладка с крестом - ложному значению проверяемого условия.
Пример 5.2. Робот говорит "No", если датчик касания не нажат, и "Yes" - если нажат. Обратите внимание на настройки блока Switch: в поле Condition можно поменять сравниваемое значение. В блоке Touch Sensor в поле Action выбрано Pressed.
Пример 5.3. На экране NXT последовательно сменяются пять изображений часов в зависимости от счётчика цикла. Для изображения часов использованы файлы Time00 - Time04. Дополнительные вкладки значений блока Switch можно добавить нажатием на кнопку "+" в поле Condition. Эта возможность доступна только при выключенном флажке Flat view. Вкладки, соответствующие различным значениям, имеют подписи (появляются при наведении на них указателя мыши). Если обрабатываемых значений больше пяти, то для того, чтобы увидеть все добавленные вкладки, нужно "растянуть" блок Switch. Для этого нужно навести указатель мыши на балку Lego внутри блока, прижать левую кнопку мыши и потянуть вправо.
При обработке сложных логических условий может возникнуть необходимость в использовании вложенных ветвлений.
Пример 5.4. Доработаем пример 5.1 так, чтобы робот останавливался ещё и при обнаружении зелёного цвета.
Задание 5.1. Напишите программу управления роботом одной кнопкой (датчиком касания). При запуске программы машина должна ожидать нажатия на кнопку Start, после чего начать движение вперёд. При нажатии на датчик касания она должна двигаться назад, при отпускании опять двигаться вперёд.
Задание 5.2. Напишите программу управления роботом двумя кнопками (два датчика касания, служащие пультом управления). Машина должна ехать вперёд при нажатии на обе кнопки. Если нажата только правая кнопка, то машина поворачивает направо; если только левая налево. Если кнопки отпущены, то машина останавливается.
Задание 5.3. Используя блок Switch в качестве оператора выбора, напишите программу для исследовательского робота, который перемещается по разноцветному полю и произносит название цвета, над которым проезжает (только основные цвета, для которых в роботе имеется соответствующий звуковой файл). Робот должен остановиться, когда доберётся до красного цвета. Подсказка: вспомните, что все основные цвета закодированы числами 0-5 .
Задание 5.4. Напишите программу, которая позволяет роботу оставаться на заданном расстоянии от подвижной стены. Робот оснащён двумя моторами и датчиком ультразвука, направленным вперёд. Перед роботом размещается подвижная стена (журнал, книга, свёрнутый полигон). Робот должен, постоянно двигаясь, сохранять расстояние до стены ≈ 30 см. Подсказка: вспомните задание 4.4 и пример 4.1 .