Светофор с дополнительными секциями

В этом уроке:

  • Как дополнительные секции светофора регулируют проезд на перекрёстке;
  • Добавляем распознавание дополнительных секций. 

В уроке о проезде перекрёстка мы обучили автомобиль проезжать светофор на основной зелёный сигнал. Однако, как мы тогда отметили, на светофоре могут быть установлены дополнительные секции (одна или две), определяющие возможные направления поворота.

Регулирование проезда дополнительными секциями

Если на светофоре установлена дополнительная секция, то поворот в обозначенную ей сторону возможен только когда секция включена. 

Например, на рисунке слева установлено две дополнительные секции. Значит, пока горит правая секция, разрешен поворот только направо. 

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

Если на светофоре установлена одна секция, то она также регулирует поворот только в свою сторону. 

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

Во всех ситуациях, если разрешён поворот налево, то разрешён и разворот. Кроме того, разумеется, секции могут включаться не только по одной, но и вместе: в любой комбинации.

Добавляем распознавание дополнительных секций

Напомним, как сейчас выглядит алгоритм распознавания сигналов светофора.

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

Давайте подумаем, как машинка должна отреагировать на светофор? 

  • Во-первых определить, что перед ней светофор. На данном этапе не важно, какой свет он сейчас показывает.
  • Когда светофор распознан, необходимо выбрать направление дальнейшего движения.
  • Далее — дождаться, когда загорится нужный сигнал и уже после этого продолжить движение в выбранном направлении.

Мы только что составили словесный алгоритм, давайте теперь реализуем его.

Сперва определяем, что горит любой сигнал, то есть мы встретили светофор. Пока рассмотрим только разрешающие сигналы. Для того, чтобы определить, что горит любой сигнал, воспользуемся логической операцией ИЛИ (OR).

Поскольку у блока ИЛИ только два входа, а возможных сигналов — три, то нам потребуется два логических блока: ко входу второго мы присоединим выход первого. Таким образом, на выходе будет true если горит хотя бы один сигнал светофора (true).

После того как машинка обнаружила разрешающий сигнал светофора, необходимо принять решение: в какую сторону ехать. Как и в предыдущем алгоритме, используем для этого генератор случайных чисел. Обратите внимание, что сейчас мы работаем во вкладке переключателя true.

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

(картинка кликабельна)

Таким образом, выполнение программы продолжится только после того, как загорится нужный сигнал светофора. После этого нужно подъехать к перекрёстку и повернуть в нужную сторону (или проехать прямо). Блоки для всех этих задач у нас уже есть, вставляем их.

(картинка кликабельна)

На этом часть алгоритма движения на разрешающий сигнал закончена, осталось добавить только остановку на красный свет. Сделаем это во второй вкладке переключателя (false). Алгоритм в ней будет выполняться, когда все три разрешающие секции светофора выключены. Такое возможно в двух случаях:

  1. Горит красный свет.
  2. Светофора нет вообще (едем на другом участке трассы).

Чтобы убедиться, что светофор есть, добавляем блок ИК-приёмника и переключатель (работаем во вкладке переключателя false).

 Выключаем моторы и попадаем в цикл, в котором дожидаемся, когда загорится один из разрешающих сигналов. После этого произойдёт выход их цикла. 

Загрузите программу в машинку и проверьте её работу. Автомобиль подъезжает к перекрёстку, выбирает одно из направлений движения, дожидается разрешающего сигнала, после чего продолжает движение.

Ну что же, вы проделали большой путь и теперь с лёгкостью сможете запрограммировать машинку на распознавание других дорожных знаков. Можно придумать еще множество дорожных ситуаций, и даже создать собственный маршрут движения! 

Ну что же, поздравляем!
Вы освоили основы программирования, выполнили множество упражнений и проектов. Не стесняйтесь возвращаться к предыдущим урокам, если что-нибудь забыли. А мы предлагаем двигаться дальше и переходить к следующей главе.
перейти к выбору главы

Обсуждение

Гарантии и возврат. Используя сайт, Вы соглашаетесь с условиями.