Урок 8. Как управлять цифровым выходом Arduino
Многие тратят годы на совершенствование навыков работы с Arduino, изучая массу материала. Но некоторые знания способны сэкономить немало времени, хотя нередко о них узнают далеко не в первый год. В этом уроке мы разберём один из таких важных моментов — на примере управления светодиодами через Arduino. Мы не будем собирать законченный проект, а на практике продемонстрируем работу ключевых функций, применяемых в Ардуино.
Для тех, кто уже хотя бы поверхностно знаком с Ардуино, включение и выключение светодиода может звучать банально. Однако это существенный навык, поскольку драйверы моторов, реле и множество других устройств управляются по тому же принципу, что и светодиод.
Типичный способ подключения светодиода к Arduino показан на схеме ниже. Поскольку в предыдущих уроках мы уже изучили макетную плату (урок 4) и разобрались с выводами платы Ардуино Uno (урок 2), подключение светодиода к цифровому выводу не вызовет затруднений. Например, так:
Светодиоды обладают полярностью, а значит, их необходимо подключать определённым образом:
Катод светодиода соединяется с заземляющим выводом Arduino (GND)
Анод светодиода соединяется с цифровым выводом Arduino (вывод 13 в нашем примере)
На схеме выше также можно заметить резистор. Это токоограничивающий резистор, который ограничивает электрический ток через светодиод и предотвращает его выход из строя.
Подсказка
Если вы пока еще слабо ориентируетесь в электричестве, резисторах и подобных темах - не отчаивайтесь, скоро мы запустим курс «Электроника для начинающих», где разберем все основы.
Токоограничивающие резисторы могут иметь номинал от 100 Ом до 47 кОм. Величина сопротивления определяет яркость свечения светодиода:
Меньшее сопротивление пропускает больший ток, обеспечивая яркое свечение,
Большее сопротивление ограничивает ток, делая свечение более тусклым.
Теперь, после подключения схемы, перейдём к программе, которая заставит светодиод включаться и выключаться.
Функция pinMode()
Начнём по порядку. Из Урока 6 нам знакомы две основные функции — void setup() и void loop(). Далее мы будем работать внутри них.
Для данного урока нам потребуется новая функция, которую мы ещё не изучали, — pinMode(). Она указывает Arduino, должен ли цифровой вывод выдавать или считывать напряжение. Мы разместим эту функцию в void setup(), поскольку она относится к настройкам.
Функция pinMode() принимает два аргумента — данные, необходимые ей для выполнения задачи. Аргументы указываются в скобках через запятую.
Первый аргумент — номер пина, в нашем примере это 13 (см. схему выше).
Второй аргумент — режим работы: ввод или вывод. В приведённом примере — вывод.
Указывайте OUTPUT, если нужно подавать напряжение, и INPUT, если требуется считывать его.
В нашем случае мы используем режим OUTPUT, поскольку планируем отправлять ток на светодиод.
Функция digitalWrite()
Перейдём к следующей важной функции — digitalWrite(). Она позволяет управлять состоянием напряжения на выводе:
ВЫСОКОЕ или HIGH — напряжение на выводе составляет 5 вольт,
НИЗКОЕ или LOW — напряжение на выводе равно 0 вольт.
Функция digitalWrite() будет использоваться внутри void loop():
У этой функции тоже два аргумента — номер контакта и состояние напряжения (ВЫСОКОЕ или НИЗКОЕ).
Функция delay()
Далее познакомимся с функцией delay(). Она проста и служит для управления длительностью состояния вывода в HIGH:
Функция delay() приказывает Arduino приостановить выполнение и ожидать. Число в скобках задаёт длительность паузы в миллисекундах (1 секунда = 1000 миллисекунд).
В этот момент программы светодиод горит на протяжении одной секунды.
Для его отключения воспользуемся digitalWrite() с параметром LOW во втором аргументе:
Функция delay() удерживает состояние НИЗКОГО напряжения в течение 1000 миллисекунд.
Поскольку обе функции — digitalWrite() и delay() — размещены в void loop(), код будет исполняться циклически, заставляя светодиод мигать, то есть периодически включаться и выключаться.
Функция digitalWrite() оказывается особенно полезной при использовании внутри условного оператора.
Из Википедии: Условный оператор или Оператор ветвления — оператор, конструкция языка программирования, обеспечивающая выполнение определённой команды только при условии истинности некоторого логического выражения, либо выполнение одной из нескольких команд в зависимости от значения некоторого выражения.
Проще говоря, условные операторы используются, когда нужно выполнить X при условии Y. Например: если A > 5, то Y = 10.
Вернёмся к основной теме урока — приведённый ниже код установит цифровой вывод в состояние ВЫСОКОГО напряжения, если показание датчика превысит 50:
В данном примере, если переменная sensorReading больше 50, выполняется функция digitalWrite(), и outputPin переходит в состояние ВЫСОКОГО напряжения.
Если переменная sensorReading меньше 50, код в блоке if будет пропущен, и функция digitalWrite() не выполнится.
В последующих уроках мы освоим ещё ряд важных навыков, которые лучше знать с самого начала изучения Ардуино.