← Вернуться к оглавлению

Урок 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() принимает два аргумента. Аргументы - это информация, необходимая функции для выполнения своей задачи. Они помещаются в скобки функции и разделяются запятой.

  • Первый аргумент функции pinMode() - это номер пина, т.е. 13 в нашем примере (см. схему выше).
  • Второй аргумент устанавливает режим ввода или вывода. В примере выше - вывод.

Используйте OUTPUT, если вы хотите вывести напряжение, и используйте INPUT, если вы хотите прочитать напряжение.

Мы собирались использовать режим OUTPUT, так как мы хотим отправить ток на светодиод.

Функция digitalWrite()

Переходим к новой функции, которую нам нужно обязательно изучить - 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() не будет выполнена.

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

Ардуино+