что верно в отношении функции digitalwrite
Arduino.ru
Функция digitalWrite()
digitalWrite()
Описание
Подает HIGH или LOW значение на цифровой вход/выход (pin).
Если вход/выход (pin) был установлен в режим выход (OUTPUT) функцией pinMode(), то для значение HIGH напряжение на соответствующем вход/выходе (pin) будет 5В (3.3В для 3.3V плат), и 0В(земля) для LOW.
Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор. Подача LOW в свою очередь отключает этот резистор. Нагрузочного резистра достаточно чтобы светодиод, подключенный к входу, светил тускло. Если вдруг светодиод работает, но очень тускло, возможно необходимо установить режим выход (OUTPUT) функцией pinMode().
Замечание. Вход/выход 13 сложнее использовать как цифровой вход, т.к. он имеет встроенный в плату резистор и светодиод. Если вы активируете еще внутренний нагрузочный резистор 20K, то напряжение на этом входе будет около 1.7В, вместо ожидаемых 5В, т.к. светодиод и добавочный резистор снижает напряжение, т.е. Вы всегда будете получать LOW. Если же Вам все же необходимо использовать 13ый вход/выход, то используйте внешний нагрузочный резистор.
Синтаксис
Параметры
Возвращаемое значение
Пример
Примечание
Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5).
digitalWrite()
Описание
Отправляет на цифровой вывод значение HIGH или LOW.
Если функцией pinMode() вывод сконфигурирован как выход (OUTPUT), то при выполнении функции digitalWrite() его напряжение будет изменено на соответствующее значение: 5 В (либо 3.3 В для плат, работающих от 3.3В) при отправке HIGH, 0 В (земля) — при LOW.
Если вывод сконфигурирован как вход INPUT, то отправка функцией digitalWrite() значения HIGH приведет к подключению внутреннего подтягивающего резистора номиналом 20 КОм (см. инструкцию по цифровым выводам). Запись значения LOW приведет к отключению подтяжки. Внутренний подтягивающий резистор может обеспечить только тусклое свечение светодиода. Поэтому, если светодиод горит, но очень тускло, наиболее вероятная причина этого — подтягивающий резистор. Для решения данной проблемы необходимо перевести соответствующий вывод в режим выхода с помощью функции pinMode().
ПРИМЕЧАНИЕ: Существуют некоторые сложности при использовании вывода 13 в качестве цифрового входа. Причиной этого является светодиод и резистор, которые припаяны к этому выводу на большинстве плат Ардуино. При включении внутреннего подтягивающего резистора 20 КОм, напряжение на этом выводе установится на уровне около 1.7 В, вместо ожидаемых 5 В, поскольку светодиод и последовательно соединенный резистор на плате понижают уровень напряжения. Таким образом, вывод будет всегда находится в состоянии LOW. Поэтому, чтобы использовать вывод 13 в качестве цифрового входа, необходимо использовать внешний резистор на землю.
Синтаксис
Параметры
value: значение HIGH или LOW
Возвращаемые значения
Пример
Программа устанавливает на выводе 13 высокий уровень HIGH, выдерживает паузу в 1 секунду, после чего возвращает вывод в низкий уровень LOW.
Примечание
Выводы, являющиеся аналоговыми входами, могут также использоваться как цифровые выводы под именем A0, A1 и т.д.
Arduino — функции — цифровой вход/выход
Arduino IDE имеет набор стандартных функций для управления входом/выходом. Вы можете легко обрабатывать как цифровые сигналы, так и аналоговые. Ниже приведен список функций с кратким описанием и примерами использования.
Цифровой вход/выход
Цифровые выводы Arduino могут быть использованы как входы или как выходы. Поэтому необходимы функции, которые позволят установить (настроить) выводы на запись или чтение данных.
Функция pinMode()
Функция pinMode() позволяет определить работу отдельных контактов. Ее синтаксис выглядит следующим образом:
pin — код — это указать номера контакта системы Arduino
mode — это одна из предопределенных констант: INPUT, OUTPUT или INPUT_PULLUP
Предназначение данных констант описано в другой статье. Примеры режим работы выводов:
Как вы можете видеть, конфигурирование контактов не такой уж сложный процесс. Стоит обратить внимание на тот факт, что тот же эффект можно получить несколькими способами.
Первые два примера основаны на непосредственном вводе номера контакта и определении режима его работы. Это правильная декларация, однако, она не рекомендуется для использования. Стоит использовать один из последующих способов.
Прямое обращение к номерам выводов может привести к путанице и ошибкам, поскольку во время написания и тестирования программы постоянно необходимо держать в голове какой номер за что отвечает. Лучшее решение — использовать определение, константу или переменную.
Определение — название для конкретного контакта (имя), которое определяет его использование. Безусловно, легче запомнить, что ledPin это вывод, к которому подключен светодиод, чем просто светодиод подключен к контакту 10.
Стоит помнить, что при объявлении соответствующего имени, мы так же будем ссылаться на него и в программе, а не только при определении режима работы вывода. Определение имен с помощью директивы define или const совпадает с практической точки зрения. Компилятор заменит данное имя на присвоенное ему значение.
Разработчики Arduino IDE рекомендуют использовать const. Мы в отношении контактов рекомендуем использовать define как четкое отличительное назначение контактов для имени.
Дополнительным преимуществом использования define является то, что он обычно размещается в начале кода, что облегчает модификацию электронной схемы в будущем. При изменении выводов в электронной схеме, в скетче нам необходимо будет только изменить номера контактов в определении выводов.
В последнем примере показано использование переменной в качестве имени контакт. Такое определение приведено на официальном сайте документации Arduino. На наш взгляд, это не лучший вариант, так как переменная займет ценное место в памяти. Единственно оправданным случаем использования переменной может быть ситуация, когда мы хотим в цикле выполнять операции над несколькими выводами. Это, однако, особый случай.
Иногда в каком-либо проекте нет необходимости в аналоговых входах, тогда эти выводы можно использовать в качестве цифрового входа или выхода. В этом случае с помощью функции pinMode() можно установить необходимый режим для контактов A0 — A5.
Использование одного или нескольких контактов из A0… A5 как цифровых не приведет к невозможности использования оставшихся в качестве аналоговых входов. Можно использовать, например, 2 аналоговых входа и 4 цифровых выходов из A0… A5.
Функция digitalWrite()
Функция digitalWrite() позволяет установить состояние вывода как цифровой выход. Ее синтаксис (как и в pinMode()) требует двух параметров: первый — это номер контакта, второй — логическое значение LOW или HIGH.
Установка значения LOW приведет к тому, что напряжение на выходе будет 0В (короткое замыкание на массу), значение HIGH около 3,3В или 5В в зависимости от напряжения питания Arduino. Ниже приведен пример использования функции digitalWrite():
В примере видно как можно установить соответствующее состояние вывода. Использованная в примере функция delay() позволяет выполнять задержку исполнения кода. Подробнее об этом будет обсуждаться далее.
При использование функции digitalWrite() в случае, когда вывод настроен как вход, необходимо включить или выключить режим PULLUP, то есть подключить подтягивающий резистор. В более поздних версиях Arduino IDE, безусловно, лучше использовать pinMode() с параметром INPUT_PULLUP.
Функция digitalRead()
Функция digitalRead() позволяет считывать состояние с вывода, определенного как цифровой вход. Эта функция возвращает значение LOW или HIGH. Необходимо указать номер контакта, с которого мы хотим прочитать состояние.
Если вывод, с которого мы считываем состояние в данный момент не подключен к схеме («висит в воздухе»), то функция может возвратить случайное значение — LOW или HIGH. Следует помнить об этом во время проектирования электронного оборудования. Для предотвращения такой ситуации необходимо использовать подтягивающий резистор. Ниже приведены примеры чтения состояния цифрового входа:
Приведенный выше пример показывает, как считывать состояние входа, и использовать эту информацию для управления выходом.
Переменная val может содержать значение LOW или HIGH, в зависимости от состояния входа. Функция digitalWrite() задает состояние выхода в зависимости от переменной val.
Довольно часто бывает необходимо выполнять некоторые операции, которые напрямую зависят от состояния на входе. В такой ситуации мы можем написать так:
Приведенный выше пример программы также зажигает и гасит светодиод в зависимости от состояния подключенной кнопки. Действия те же самые, но синтаксис программы немного другой. Можно использовать оба вышеупомянутых решения, в некоторых случаях проще применить первый пример, в других — второй.
Функции digitalWrite() и delay() в Arduino IDE на примере мигания светодиода.
В статье познакомимся с платой Arduino Uno, пинами платы. Напишем программу мигания светодиода в Arduino IDE.
Сборка схемы
Плата Arduino Uno
Для начала разберемся с платой, с которой будем работать. Для примера используем Arduino Uno — плата с микроконтроллером, то есть микросхемой. Она нужна для управления электронными устройствами.
Плата Arduino Nano
На изображении видно устройство данной платы. В этой статье нас интересуют цифровые выводы. Они также называются пины или «ножки» платы. Данные пины используются для подключения к плате различных электронных компонентов.
Каждый из пинов имеет своё обозначение. Для работы нам нужны пин 3 и Gnd. Пин 3 мы используем для вывода, а пин Gnd для заземления. Gnd — это сокращение слова ground, в переводе на русский — земля.
Чтобы ток куда-то шел, цепь должна быть замкнута. Для этого есть обозначения + и —. Ток перемещается от + к —
Сборка схемы на макетной плате
Для сборки нам нужны:
Короткую ножку подключаем к пину GND. Длинную ножку светодиода соединяем с резистором. Второй конец резистора соединяем проводом с пином 3.
Программирование светодиода
Для начала разберемся, что такой ввод и вывод. Есть команды, которые мы даем компьютеру. Например, мы вводим какой-то текст, который хотим распечатать. В этом случае клавиатура — это устройство ввода, так как с ее помощью мы передаем команду компьютеру. Принтер — устройство вывода, он «выводит» наш результат на бумагу.
Теперь разберемся с кодом для мигания светодиода. Нам нужно настроить нашу ножку на вывод. Для этого используем команду pinMode. Эта команда говорит плате, как она будет работать: на вход или на вывод. Команда является настройкой программы, поэтому она пишется в первом блоке setup(). Общий вид кода:
В скобках после функции pinMode мы указываем номер пина, с которым мы будем работать. После точки с запятой указываем, на что будет работать наш пин: на ввод INPUT или на вывод OUTPUT. В нашем случае пин 3 работает на вывод, это мы и пишем в коде.
Не забывайте после каждой функции ставить знак «;», например:
Функция digitalWrite()
Функция digitalWrite даёт команду подать напряжение на определённый пин платы. Номер этого пина мы указываем в скобках. У функции есть параметры HIGH и LOW. Параметр HIGH (с английского — высоко) включает напряжение, параметр LOW (с английского — низко) отключает.
Нам нужно включить светодиод. Для этого мы включаем напряжение на 3-ий пин, поэтому код будет выглядеть так:
Это уже готовый код. На его основе мы можем включить светодиод. Если загрузить этот код на плату, то светодиод загорится.
Для выключения светодиода мы используем ту же функцию. Для этого в скобках после функции задаем параметр LOW. Функция выглядет так: digitalWrite(3; LOW)
Функция delay()
Delay с английского переводится как «задерживать». Эту задачу и выполняет функция: она приостанавливает выполнение программы на указанный промежуток времени. В скобках мы указываем время остановки в миллисекундах. 1 секунда = 1000 миллисекунд, поэтому если нам нужно установить задержку в секунду, пишем: delay(1000).
Теперь допишем наш код с использованием функции delay() и функцией digitalWrite() для выключения светодиода:
После загрузки программы на плату получаем следующее:
Функция 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 – с помощью записи определенных битов в соответствующих регистрах. Позже мы рассмотрим и эти способы.
Синтаксис функции
Функция не возвращает значения. Результат работы зависит от типа пина, указанного в первом параметре:
Пример
Самый простой пример функции – это, конечно же, всеми любимый маячок. Мы включаем и выключаем светодиод, подавая напряжение на порт, к которому он подключен к плате ардуино.
Рассмотрим стандартный пример в Arduino IDE 1.8.2. В скетче мы используем встроенную константу LED_BUILTIN, содержащую номер порта, к которому подключен светодиод. Мы всегда можем определить свои константы с помощью директивы #define.
А вот пример управления направлением двигателей, подключенных к Arduino через плату расширения «драйвера двигателя». Эта функция заставит драйвер изменить направление вращения двигателя согласно выставленным значениями на цифровых пинах. Соединив драйвер с платой ардуино через эти пины, мы сможем управлять даже относительно большими двигателями с помощью нашей знакомой функции.
Пример использования функции с пином, имеющим тип INPUT:
Выводы
Одна из самых популярных функций Arduino digitalWrite позволяет выставлять на пинах платы высокое (5В или 3.3 В)или низкое (0В) значения напряжения. Функция активно используется в реальных проектах, формируя выходные сигналы на пинах. При использовании функции с пином с типом INPUT, функция включает встроенный резистор, что переводит порт в режим PULLUP.