Функция digitalWrite ()

Функция digitalWrite – одна из самых популярных функций Arduino.Она встречается практически в любом проекте, где требуется помигать светодиодами или подать какие-то сигналы на подключенные устройства. В этой статье мы рассмотрим описание синтаксиса digitalWrite и особенности использования этой функции в реальных проектах.

Описание digitalWrite

Для чего нужна функция

Функция позволяет управлять подключенным оборудованием  Arduino путем подачи или снятия рабочего напряжения (в большинстве случаев – 5В) на пины.  По сути, digitalWrite превращает Arduino в большую умную розетку, включающую или выключающую напряжение на ее портах в зависимости от наших задач. Подавая напряжение на подключенные устройства, мы заставляем их что-то делать: например, включать свет, издавать звуки, включать двигатель. Кроме того, с помощью digitalWrite можно подавать импульсы и передавать информацию закодированными сигналами и сообщениями.

Перевод названия функции

Дословный перевод функции – «цифровая запись». Почему запись? Тут все понятно – с точки зрения Arduino он записывает что-то, в отличие от функции digitalRead, где данные, наоборот, поступают в контроллер и он их «читает».

Почему цифровая? Потому что мы можем сформировать только цифровой сигнал в двоичном коде (1 – высокое напряжение, 0 – низкое напряжение). В отличие от аналогового сигнала, мы не сможем точно выставить на выходе, например, 4,15 вольт. Возможны только два значения напряжения: минимальное и максимальное рабочее  (например, в Arduino Uno это 0 В и 5 В соответственно). Естественно, в реальной жизни напряжение не равно в точности 0 или 5 вольт, но при правильной схеме питания платы Arduino, можно считать все возможные отклонения несущественными.

Особенности использования

Несмотря на свое название, функция может управлять и аналоговыми пинами, выставляя у них на выходе 0 или 5 вольт. Вы просто указываете в качестве параметра один из аналоговых пинов и все.

Время исполнения функции на плате Arduino Uno составляет порядка 5 микросекунд.

В Arduino есть альтернативные способы выставить порты в 0 или 1 – с помощью записи определенных битов в соответствующих  регистрах. Позже мы рассмотрим и эти способы.

Синтаксис функции

digitalWrite (<номер пина>, <значение>)

  • Номер пина – любой из пинов подключенной платы Arduino
  • Значение – 1 или 0 (лучше использовать константы HIGH и LOW соответственно).

Функция не возвращает значения. Результат работы зависит от типа пина, указанного в первом параметре:

  • Если тип пина предварительно установлен в режим OUTPUT, то на выходе будет установлена логическая единица, что соответствует рабочему напряжению платы (5 В или 3.3В) или логический ноль – 0В (земля).
  • Если тип пина явым образом не указан или выставлено значение INPUT, то результатом работы функции станет включение или выключение внутреннего сопротивления 20K, являющегося нагрузочным резистором. При этом реальное напряжение на выходе будет меньше 5В. Более подробно об этом написано в статье про типы пинов.

Примеры:

  • digitalWrite(13, 1) – установка высокого напряжения на пин 13
  • digitalWrite(13, HIGH) – то же самое, но с использованием константы
  • digitalWrite(PIN_LED, LOW) – установка низкого напряжения на пин, указанный в константе PIN_LED.
  • digitalWrite(A0, HIGH) – установка высокого напряжения на пине A0.

Пример

Самый простой пример функции – это, конечно же, всеми любимый маячок. Мы включаем и выключаем светодиод, подавая напряжение на порт, к которому он подключен к плате ардуино.

Функция digitalWrite blink

Рассмотрим стандартный пример в Arduino IDE 1.8.2. В скетче мы используем встроенную константу LED_BUILTIN, содержащую номер порта, к которому подключен светодиод. Мы всегда можем определить свои константы с помощью директивы #define.

void setup() {

pinMode(LED_BUILTIN, OUTPUT); // Устанавливаем тип пина - выход

}

void loop() {

digitalWrite(LED_BUILTIN, HIGH);   // Подаем высокое напряжение

delay(1000);                       // wait for a second

digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW

delay(1000);                       // wait for a second

}

А вот пример управления направлением двигателей, подключенных к Arduino через плату расширения «драйвера двигателя». Эта функция заставит драйвер изменить направление вращения двигателя согласно выставленным значениями на цифровых пинах. Соединив драйвер с платой ардуино через эти пины, мы сможем управлять даже относительно большими двигателями с помощью нашей знакомой функции.

void motorAForward()

{

digitalWrite(CAR_PIN_A1, HIGH); // Подаем на пин CAR_PIN_A1 высокое значение напряжения

digitalWrite(CAR_PIN_A2, LOW); // Подаем на пин CAR_PIN_A2 низкое значение напряжения

}

// В этой функции мы задаем другое сочетания сигналов, которое «распознает» драйвер

void motorABackward()

{

digitalWrite(CAR_PIN_A1, LOW);

digitalWrite(CAR_PIN_A2, HIGH);

}

Пример использования функции с пином, имеющим тип INPUT:

pinMode(10, INPUT);
digitalWrite(10, HIGH); // Включаем внутренний резистор 20К в качестве подтягивающего для порта
int val = digitalRead(10) ; // Считываем значение от устройства (например, нажатой кнопки).

Выводы

Одна из самых популярных функций Arduino digitalWrite позволяет выставлять на пинах платы высокое (5В или 3.3 В)или низкое (0В) значения напряжения. Функция активно используется в реальных проектах, формируя выходные сигналы на пинах. При использовании функции с пином с типом INPUT, функция включает встроенный резистор, что переводит порт в режим PULLUP.

ПОДЕЛИТЬСЯ

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here