Урок 8. Как управлять цифровым выходом Arduino

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

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

Типичный способ подключения светодиода к Arduino показан на схеме ниже. Поскольку в предыдущих уроках мы уже изучили макетную плату (урок 4) и разобрались с выводами платы Ардуино Uno (урок 2), подключение светодиода к цифровому выводу не вызовет затруднений. Например, так:

Подключение светодиода к цифровому выводу Arduino

Светодиоды обладают полярностью, а значит, их необходимо подключать определённым образом:

  • Катод светодиода соединяется с заземляющим выводом Arduino (GND)

  • Анод светодиода соединяется с цифровым выводом Arduino (вывод 13 в нашем примере)

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

Подсказка

Если вы пока еще слабо ориентируетесь в электричестве, резисторах и подобных темах - не отчаивайтесь, скоро мы запустим курс «Электроника для начинающих», где разберем все основы.

Токоограничивающие резисторы могут иметь номинал от 100 Ом до 47 кОм. Величина сопротивления определяет яркость свечения светодиода:

  • Меньшее сопротивление пропускает больший ток, обеспечивая яркое свечение,

  • Большее сопротивление ограничивает ток, делая свечение более тусклым.

Теперь, после подключения схемы, перейдём к программе, которая заставит светодиод включаться и выключаться.

Функция pinMode()

Начнём по порядку. Из Урока 6 нам знакомы две основные функции — void setup() и void loop(). Далее мы будем работать внутри них.

Для данного урока нам потребуется новая функция, которую мы ещё не изучали, — pinMode(). Она указывает Arduino, должен ли цифровой вывод выдавать или считывать напряжение. Мы разместим эту функцию в void setup(), поскольку она относится к настройкам.

Функция pinMode() в Arduino

Функция pinMode() принимает два аргумента — данные, необходимые ей для выполнения задачи. Аргументы указываются в скобках через запятую.

  • Первый аргумент — номер пина, в нашем примере это 13 (см. схему выше).

  • Второй аргумент — режим работы: ввод или вывод. В приведённом примере — вывод.

Указывайте OUTPUT, если нужно подавать напряжение, и INPUT, если требуется считывать его.

В нашем случае мы используем режим OUTPUT, поскольку планируем отправлять ток на светодиод.

Функция digitalWrite()

Перейдём к следующей важной функции — digitalWrite(). Она позволяет управлять состоянием напряжения на выводе:

  • ВЫСОКОЕ или HIGH — напряжение на выводе составляет 5 вольт,

  • НИЗКОЕ или LOW — напряжение на выводе равно 0 вольт.

Функция digitalWrite() будет использоваться внутри void loop():

Функция digitalWrite() в Arduino

У этой функции тоже два аргумента — номер контакта и состояние напряжения (ВЫСОКОЕ или НИЗКОЕ).

Функция delay()

Далее познакомимся с функцией delay(). Она проста и служит для управления длительностью состояния вывода в HIGH:

Функция delay() в Arduino

Функция delay() приказывает Arduino приостановить выполнение и ожидать. Число в скобках задаёт длительность паузы в миллисекундах (1 секунда = 1000 миллисекунд).

В этот момент программы светодиод горит на протяжении одной секунды.

Для его отключения воспользуемся digitalWrite() с параметром LOW во втором аргументе:

Код Arduino для управления светодиодом

Функция delay() удерживает состояние НИЗКОГО напряжения в течение 1000 миллисекунд.

Поскольку обе функции — digitalWrite() и delay() — размещены в void loop(), код будет исполняться циклически, заставляя светодиод мигать, то есть периодически включаться и выключаться.

Функция digitalWrite() оказывается особенно полезной при использовании внутри условного оператора.

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

Проще говоря, условные операторы используются, когда нужно выполнить X при условии Y. Например: если A > 5, то Y = 10.

Вернёмся к основной теме урока — приведённый ниже код установит цифровой вывод в состояние ВЫСОКОГО напряжения, если показание датчика превысит 50:

Условный оператор в Arduino

В данном примере, если переменная sensorReading больше 50, выполняется функция digitalWrite(), и outputPin переходит в состояние ВЫСОКОГО напряжения.

Если переменная sensorReading меньше 50, код в блоке if будет пропущен, и функция digitalWrite() не выполнится.

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