Для начала опишем, что такое работа светофора на понятном нам русском языке,
сформулируем алгоритм его работы.
Когда мы говорим «светофор работает» нам понятно, что имеется в виду.
Но для того, чтобы контроллер мог выполнить программу,
каждое действие нужно описать предельно конкретно.
Сначала можно привести пример, близкий к работе светофора из жизни.
Что такое перейти дорогу?
Мы все знаем с детства.
Нас учили смотреть в разные стороны и так далее, но как это описать подробно?
Для начала мы подходим к переходу, затем мы смотрим налево.
Мы проверяем, существуют ли движущиеся машины слева,
и если их не существует, двигаемся до середины дороги.
После этого мы смотрим направо и проверяем,
есть ли движущиеся машины справа.
В случае их отсутствия переходим дорогу до конца,
в случае наличия – стоим и ждем, пока они закончатся.
И только тогда завершаем переход дороги.
На самом деле эти действия можно описать еще более детально,
вплоть до переставления ног, поворота головы и так далее.
Похожим образом мы можем описать что из себя представляет работа светофора.
В чем она заключается?
Поочередно включаются сигналы разного цвета.
Включается красный сигнал, затем,
на протяжении какого-то времени в работе светофора ничего не меняется.
Затем, одновременно с красным сигналом, включается желтый сигнал,
и они светятся вместе на протяжении секунды.
После секундной задержки оба сигнала выключаются и загорается зеленый сигнал.
Затем проходит еще какое-то время, предназначенное для зеленого сигнала,
он выключается, включается вновь, выключается, ну то есть мигает.
После того, как зеленый помигал, на секунду включается желтый сигнал,
и выключившись, передает место красному.
Затем цикл повторяется.
Вы уже знаете, что включение того или иного сигнала заключается
в подаче напряжения на тот или иной контакт.
Я надеюсь, что вы уже собрали модель светофора и
подключили ее к Arduino, и теперь, на самом деле, у вас есть все, для того,
чтобы написать программу для полноценной работы светофора.
Вы можете сейчас поставить меня на паузу,
посмотреть в описанный алгоритм, посмотреть в пример,
который мы разбирали в Linked и составить код самостоятельно.
Только не забывайте, что помимо непосредственно работы светофора,
есть еще подготовительная фаза, когда мы настраиваем три порта,
к которому подключены светодиоды на выход.
Посмотрите, у нас получилась такая схема, где мы выполняем, своего рода, перевод.
Сначала формулируем в нечто алгоритм на русском языке,
затем переводим его на язык программирования.
Дальнейшим переводом займется компилятор, создаст машинный код,
который понимает контроллер.
Контроллер, в свою очередь, превратит команды в определенные сигнал на
определенных портах, и мы увидим работу устройства своими глазами,
когда эти сигналы дойдут до светодиодов исполнительных устройств.
Теперь мы можем загрузить получившийся код и посмотреть, как это работает.
Давайте посмотрим какой код получился у меня.
Я надеюсь, что у вас примерно такой же.
Вначале я определил 3 контакта как выходы,
те три контакта, куда у меня подключены светодиоды.
Затем в лупе я начал включать и выключать напряжение на этих контактах.
Сначала на пине, к которому подключен красный светодиод.
Затем сделал задержку, пока красный горит.
Затем вместе с ним включил желтый светодиод.
Они некоторое время – секунду – горели вместе.
А затем я выключил напряжение на обоих контактах.
Хочу особенно обратить ваше внимание на то, что контроллер не обладает
никаким искусственным интеллектом, и не будет ничего делать до тех пор,
пока вы явно ему не скажете сделать то или иное действие.
Это особенно хорошо видно в этом фрагменте.
Мы включили красный светодиод, а затем вместе с ним включили желтый,
и красный при этом не погас, потому что соответствующей команды не поступало.
Она поступит позже, после секунды совместного свечения красного и желтого.
Также обратите внимание на то, что я говорю чуть упрощенно: мы включили красный
светодиод, мы включили желтый светодиод.
На самом деле контроллер не имеет ни малейшего понятия о том,
что подключено к его пинам.
Он всего лишь навсего включает или выключает напряжение на заданном контакте.
Теперь посмотрим далее.
После выключения красного и желтого, я включаю зеленый.
Жду 3 секунды и выключаю его.
После чего трижды повторяю эти же действия, только с маленькой задержкой.
Это фаза мигания зеленого сигнала.
Затем осталось включить желтый, что я и делаю.
А затем выключаю его.
После этого цикл завершается и начинается снова с включения красного сигнала.
Теперь мы, наконец, можем загрузить код для нашего первого устройства,
только предварительно не забудем убедиться в том,
что выбран порт и выбрана правильная плата.
После этого я загружаю, в процессе мы не встречаем никаких ошибок,
Пожалуйста: красный, красный,
желтый, зеленый, зеленый мигает, желтый и красный.
И никакого ручного управления!
Ура, мы сделали первое устройство!