За что отвечает функция pinmode
Функция pinMode в Ардуино
Функция pinMode() Arduino IDE устанавливает режим работы заданного пина, как входа или выхода. Цифровой пин Ардуино может находиться в двух состояниях. В режиме входа пин считывает напряжение от 0 до 5 Вольт, а в режиме выхода – выдавать на пине такое же напряжение. Режим работы пина микроконтроллера выбирается при помощи функции pinMode(pin, mode), где pin это номер пина, а mode это режим.
pinMode Arduino IDE описание
Arduino pinMode OUTPUT (пины настроены как выход)
OUTPUT (порт работает как выход) — пин становится управляемым источником питания с максимальным током 40 мА. В зависимости от команды digitalWrite() пин принимает значение единицы или нуля. Пример: pinMode (10, OUTPUT);
Функция digitalWrite() и analogWrite()
Цифровой пин Ардуино может генерировать цифровой сигнал с помощью команды digitalWrite(), т.е. выдавать напряжение 5 Вольт. Цифровой сигнал может иметь два значения — 0 или 1 (0 Вольт или 5 Вольт). Если в программе используется команда analogWrite() для ШИМ портов платы, то микроконтроллер может генерировать сигнал PWM Arduino на портах — создавать имитацию аналогового сигнала.
К пинам ардуино нельзя подключать устройства, потребляющие ток более 40 мА, так как основное назначение микроконтроллера — это управления другими устройствами при помощи логических сигналов. Если к пину подключить устройство, потребляющее ток больше указанного значения, то пин может выгореть. Поэтому к выводам микроконтроллера Ардуино не следует подключать ничего мощнее светодиода.
Arduino pinMode INPUT (пины настроены как вход)
INPUT (порт работает как вход) — пин в этом режиме считывает данные с аналоговых и цифровых датчиков, состояния кнопок. Порт находится в высокоимпедансном состоянии, т.е. у пина высокое сопротивление. Пример: pinMode (10, INPUT);
Функция digitalRead() и analogRead()
Arduino может определить наличие напряжения на пине через функцию digitalRead(), которая возвращает 0 (LOW) или 1 (HIGH). Существует разница между цифровым датчиком (который обнаруживает включение/выключение) и аналоговым датчиком, значение которого постоянно изменяется. Используя функцию analogRead(), можно прочитать напряжение с аналогового датчика, функция возвращает число от 0 до 1023.
Нельзя подавать на вход микроконтроллера напряжение выше напряжения питания платы. Кроме того, для аналоговых выводов Ардуино можно использовать команды digitalRead() и digitalWrite(). В этом случае аналоговые порты будут считывать (digitalRead) или выдавать (digitalWrite) цифровой, а не аналоговый сигнал.
Arduino pinMode INPUT_PULLUP
INPUT_PULLUP (порт работает как вход) но к пину подключается резистор в 20 кОм. В этом режиме при подключении кнопки к Ардуино можно не использовать внешние подтягивающие резисторы. Пример: pinMode (10, INPUT_PULLUP);
Функция arduino pinMode
pinMode в Arduino помогает установить режим работы пина для выполнения операций считывания или записи. Как правило, эта функция используется внутри метода setup () и выполняется один раз при запуске программы. Неправильное выставление режима входов и выходов ардуино может сказать на работоспособности проекта и платы. В этой статье мы узнаем, как пользоваться pinMode, в каких случаях ее можно опустить, а в каких она обязательна.
Синтаксис функции
Функция не возвращает значения.
Описание параметров
В параметре указываем порт, который хотим сконфигурировать. Как правило, функция используется для установки цифровых пинов, т.к. аналоговые пины ардуино чаще всего используются как входные, а входной режим используется Arduino по умолчанию.
В параметре указываем тип режима работы пина (более подробно о возможных режимах мы поговорим чуть позже).
Константы INPUT, OUTPUT и INPUT_PULLUP
В Ardino предусмотрены константы, обозначающие варианты типов:
Примеры использования
Зачем нужна функция pinMode
Режимы работы портов и функция pinMode входят в число первых вопросов, возникающих у начинающих ардуинщиков. Действительно, зачем нам нужно определять самим тип порта и почему микроконтроллер не может это сделать самостоятельно?
Для ответа на вопрос нам нужно немного окунуться в электронику. Вспомните, что мы пишем программу не для абстрактного компьютера, а для вполне конкретного устройства, схема которого может кардинально отличаться от проекта к проекту. Вы можете подключить к плате Arduino огромное количество разнообразных устройств с совершенно разными характеристиками (сопротивление, емкость и т.п.). Присоединив их к Arduino, вы создаете совершенно новую электрическую схему, в которой должны быть уже учтены параметры, как самой платы, так и внешних устройств. Так, например, подключение двигателя, который потребляет высокий ток (особенно в момент старта и остановки) будет сильно отличаться по схеме от подключения какого-либо датчика. В некоторых случаях Ардуино становится источником питания, в некоторых – просто вольтметром, а это совершенно разные режимы работы: в первом случае нужно по возможности снизить внутреннее сопротивление (можно придумать такую аналогию – мы громко говорим, нужно чтобы ничего не мешало) а во втором – наоборот, максимально поднять (мы слушаем, рот можно закрыть).
Электрическое сопряжение – очень непростое дело и самостоятельно новичку разобраться во всех нюансах было бы очень не просто. Тем более, что для работы с каждым типом устройств желательно создавать свою уникальную схему подключения и подбирать радиоэлементы (резисторы, конденсаторы), обеспечивающие наиболее безопасный и энергоэффективный режим работы. К счастью, в некоторых случаях Arduino берет часть работы на себя, подключая или отключая необходимый способ сопряжения, если вы укажете ему прямо в программе, в каком режиме работы должны находиться пины. Именно это и делается с помощью функции ардуино pinMode. Указав номер порта и тип подключения, вы тем самым заставляете Arduino задействовать или отключать необходимые элементы платы. Полученный результат в большинстве случаев достаточно хорошо решает проблему сопряжения нескольких электронных компонентов.
Режимы работы пинов Arduino
Как правило, каждый пин платы Arduino работает в двух возможных режимах: или в качестве входа или в качестве выхода. Для установки режима работы Arduino в основном используется два варианта параметров: INPUT и OUTPUT. Но иногда при работе с датчиками нужно выставить пин в режим с неявно подключенным внутренним резистором, поэтому в нашем арсенале есть еще одна константа, определяющая тип пина: INPUT_PULLUP.
Pin INPUT
Режим INPUT определяет высокоимпедансное состояние пина для работы с внешними источниками сигналов (как правило, это различные варианты датчиков, от которых поступают показания, отсюда слово INPUT). Другими словами, в этом состоянии вы можете подключить практически любую нагрузку, потому что к входу неявным образом подключается высокоомный (десяток мегаом) резистор.
Для установки режима INPUT нужно использовать следующую команду:
По умолчанию, все пины Arduino установлены в режим INPUT, поэтому указывать это явно не требуется и команда с такой константной практически не встречается в реальных проектах.
Pin OUTPUT
В режиме OUTPUT Arduino поддерживает пин в низкоимпедансном состоянии, при котором на внешнее устройство выдается максимально возможный ток (плата, по сути, становится источником тока). В этом режиме обычно работают пины Arduino с подключенными светодиодами, сервоприводами (маломощными), пьезоизлучателями, реле, драйверами двигателей и другими внешними устройствами, являющимися для Arduino внешними (отсюда слово OUTPUT). Для установки пина в режим OUTPUT нужно использовать следующую команду:
Pin INPUT_PULLUP

Режим INPUT_PULLUP широко используется при работе с кнопками в Ардуино. В не нажатом состоянии подключенная к пину кнопка создает неопределенное состояние (а провод, ведущий к Arduino выступает в роли своеобразной антены, усиливающей все наводки). Для исправления ситуации в схему добавляют подтягивающий резистор. Использование команды pinMode с параметром INPUT_PULLUP позволяет обойтись без дополнительного внешнего сопротивления, используя внутренний резистор Arduino.
Альтернативным способом использования INPUT_PULLUP является подача высокого уровня напряжения на вход, находящийся в режиме INPUT. Команда digitalWrite(10, HIGH) для пина 10, установленного в режим INPUT, включит внутренний резистор так же, как это сделала бы команда pinMode(10, INPUT_PULLUP).
Теперь для вас должно стать понятно, почему даже в простых схемах ваши светодиоды иногда светились очень тускло: вы просто забывали установить для них тип OUTPUT, а когда включали c помощью команды digitalWrite, вы подсоединяли встроенный резистор, тем самым ограничивая ток и степень свечения светодиода.
Цифровые входы/выходы
Нумерация пинов
Пины пронумерованы на плате как “цифровые” D* пины и аналоговые A* пины. К цифровым пинам мы будем обращаться просто по их номеру, т.е. D3 это просто 3. С аналоговыми пинами чуть сложнее:
Режимы работы пинов
Если со входом/выходом всё понятно, то с подтяжкой давайте разберёмся. В режиме входа пин микроконтроллера не подключен никуда и ловит из воздуха всякие наводки, получая практически случайное значение. Для задания пину “состояния по умолчанию” используют подтяжку резистором к земле или питанию. Вот режим INPUT_PULLUP включает встроенную в микроконтроллер подтяжку пина к питанию. Подробнее об этом, со схемами и примерами я рассказывал в начале вот этого видео урока.
Вывод цифрового сигнала
Цифровой пин в режиме выхода ( OUTPUT ) может генерировать цифровой сигнал, т.е. выдавать напряжение. Так как понятие “цифровой” обычно связано с двумя состояниями, 0 и 1, цифровой пин может выдать 0 или 1, точнее: сигнал низкого или высокого уровня. Сигнал низкого уровня это 0 Вольт, грубо говоря в этом состоянии пин подключается к GND микроконтроллера. Сигнал высокого уровня подключает пин к VCC микроконтроллера, то есть к питанию. Если вы вспомните урок по питанию платы, то поймёте, что сигнал высокого уровня на цифровом пине будет варьироваться в зависимости от того, как питается плата Arduino. При питании от источника 5V на пине будет 5V, при питании от USB с потерей на защитном диоде мы получим около 4.7 Вольт на цифровом пине в режиме выхода с высоким сигналом. Самый главный момент касательно цифровых пинов: микроконтроллер – это логическое устройство, которое создано для управления другими устройствами при помощи логических (цифровых) сигналов. Под словом логическое я подразумеваю не силовое, то есть питать что-то от микроконтроллера нельзя, за редким исключением. На картинке с распиновкой выше вы можете найти надпись “Absolute MAX per pin 40mA, recommended 20mA“. Это означает, что максимум можно снять с пина 40 миллиампер, а рекомендуется не больше 20 миллиампер. Поверьте, для микроконтроллера это очень много. В других микроконтроллерах ограничение по току на пин может составлять 5-10 мА. Также есть общее ограничение на ток с цифровых пинов – 200 мА: “Absolute MAX 200mA for entire package“. Эту информацию можно найти в любом официальном источнике информации об Arduino и микроконтроллере в целом, в том числе в даташите на микроконтроллер. Что произойдёт, если снять с пина больше, чем он может отдать? Всё очень просто – он сломается. Что будет, если снять с нескольких пинов больше, чем может отдать микроконтроллер в целом? Правильно – сгорит микроконтроллер. Поэтому ничего мощнее светодиода и маленькой пищалки к микроконтроллеру подключать нельзя. Никаких моторчиков, лампочек, нагревателей, мощных радио-модулей и прочего питать от цифровых пинов нельзя. Цифровые пины служат для подачи команд другим устройствам, например реле/транзисторам для коммутации нагрузок. Но об этом мы поговорим отдельно. Сейчас вернёмся к вопросу подачи цифрового сигнала: для этого у нас есть функция digitalWrite(pin, value) :
Пример, в котором пины инициализируются как выходы, и на них подаётся сигнал:
Перейдём к чтению цифрового сигнала в режиме INPUT
Чтение цифрового сигнала
Цифровой пин может “измерять” напряжение, но сообщить он может только о его отсутствии (сигнал низкого уровня, LOW ) или наличии (сигнал высокого уровня, HIGH ), причём отсутствием напряжения считается промежуток от 0 до
2.1V. Соответственно от
2.1V до VCC (до 5V) микроконтроллер считает за наличие сигнала высокого уровня. Таким образом микроконтроллер спокойно может работать с логическими устройствами, которые шлют ему высокий сигнал с напряжением 3.3V, он такой сигнал примет как HIGH.
Данный код будет выводить в порт сигнал на пине D5. Если подключить его проводом к VCC – получим 1, если к GND – получим 0.
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.
Довольно часто бывает необходимо выполнять некоторые операции, которые напрямую зависят от состояния на входе. В такой ситуации мы можем написать так:
Приведенный выше пример программы также зажигает и гасит светодиод в зависимости от состояния подключенной кнопки. Действия те же самые, но синтаксис программы немного другой. Можно использовать оба вышеупомянутых решения, в некоторых случаях проще применить первый пример, в других — второй.
Функция pinMode
Режим работы пина (вход или выход)
Начиная с Arduino 1.0.1, можно включить внутренние подтягивающие резисторы в режиме INPUT_PULLUP. Кроме того, режим INPUT явно отключает внутренние подтягивающие резисторы.
Разное
Ножки для корпусов РЭА можно сделать из резиновой накладки поршня медицинского шприца.
Интересно
Диэлектрические и диамагнитные отвертки можно выпилить из старых стеклотекстолитовых плат.
Похожие инструкции
В данном учебном материале мы Вам покажем, как создать простой графический интерфейс пользователя и добавить к нему несложной функциональности.
Приводится описание современной, мощной и удобной среды разработки mikroC, которая включает большую библиотеку готовых функций для работы с разнообразными интерфейсами и устройствами и позволяет быстро создавать эффективные программы на языке высокого уровня Си для микроконтроллеров семейств PIC, AVR, MCS-51 и др.
Python является простым и, в то же время, мощным интерпретируемым объектно-ориентированным языком программирования.
Сегодня практически невозможно представить себе приложение, не обладающее интерфейсом пользователя. Понятия Software и GUI (Graphical User Interface) неразрывно связаны друг с другом.
В данной статье рассказывается о том, как легко и просто освоить один из новых продуктов Borland C++ Builder 6.0 для разработки программ и быстро начать создавать собственные программы, работающие в операционной системе Windows.




