Учебники

Arduino — функции ввода / вывода

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

Пины настроены как ВХОД

Пины Arduino по умолчанию настроены как входы, поэтому их не нужно явно объявлять как входы с помощью pinMode (), когда вы используете их в качестве входов. Считается, что выводы, настроенные таким образом, находятся в состоянии высокого импеданса. Входные контакты предъявляют чрезвычайно малые требования к цепи, которую они дискретизируют, что эквивалентно последовательному резистору 100 мОм перед контактом.

Это означает, что для переключения входного контакта из одного состояния в другое требуется очень мало тока. Это делает выводы полезными для таких задач, как реализация емкостного сенсорного датчика или считывание светодиода в качестве фотодиода.

Контакты, сконфигурированные как pinMode (pin, INPUT), к которым ничего не подключено, или с проводами, подключенными к ним, которые не подключены к другим цепям, сообщают о случайных изменениях состояния контактов, захвате электрических помех из окружающей среды или емкостной связи состояния соседней булавки.

Подтягивающие резисторы

Подтягивающие резисторы часто полезны для приведения входного контакта в известное состояние, если вход отсутствует. Это можно сделать, добавив подтягивающий резистор (до + 5 В) или понижающий резистор (резистор к земле) на входе. Резистор 10K является хорошим значением для резистора с повышением или понижением.

Использование встроенного подтягивающего резистора с выводами, настроенными в качестве входа

В микросхему Atmega встроено 20 000 подтягивающих резисторов, к которым можно получить доступ из программного обеспечения. Доступ к этим встроенным нагрузочным резисторам можно получить, установив pinMode () как INPUT_PULLUP. Это эффективно инвертирует поведение режима INPUT, где HIGH означает, что датчик выключен, а LOW означает, что датчик включен. Значение этого подтягивания зависит от используемого микроконтроллера. На большинстве плат на базе AVR это значение гарантируется в пределах от 20 кОм до 50 кОм. На Arduino Due он составляет от 50 кОм до 150 кОм. Для точного значения, обратитесь к спецификации микроконтроллера на вашей плате.

При подключении датчика к выводу, настроенному с помощью INPUT_PULLUP, другой конец должен быть заземлен. В случае простого переключателя это заставляет штифт читать HIGH, когда переключатель разомкнут, и LOW, когда переключатель нажат. Подтягивающие резисторы обеспечивают достаточный ток, чтобы зажечь светодиод, слабо подключенный к выводу, настроенному как вход. Если кажется, что светодиоды в проекте работают, но очень тускло, это, вероятно, происходит.

Те же регистры (места внутренней памяти чипа), которые контролируют, является ли вывод ВЫСОКИМ или НИЗКИМ, управляют подтягивающими резисторами. Следовательно, вывод, который настроен на включение подтягивающих резисторов, когда вывод находится в режиме INPUT, будет иметь вывод, настроенный как ВЫСОКИЙ, если вывод затем переключается в режим ВЫХОД с помощью pinMode (). Это работает и в другом направлении, и на выходном выводе, который остается в ВЫСОКОМ состоянии, будет настроен подтягивающий резистор, если он переключен на вход с помощью pinMode ().

пример

pinMode(3,INPUT) ; // set pin to input without using built in pull up resistor
pinMode(5,INPUT_PULLUP) ; // set pin to input using built in pull up resistor

Пины настроены как выходной

Пины, настроенные как OUTPUT с pinMode (), как говорят, находятся в состоянии низкого сопротивления. Это означает, что они могут обеспечить значительную величину тока для других цепей. Контакты Atmega могут подавать (обеспечивать положительный ток) или потреблять (обеспечивать отрицательный ток) до 40 мА (миллиампер) тока на другие устройства / цепи. Этого тока достаточно, чтобы ярко загореться светодиод (не забывайте о последовательном резисторе) или запустить много датчиков, но недостаточно тока для работы реле, соленоидов или двигателей.

Попытка запустить устройства с высоким током от выходных выводов может привести к повреждению или разрушению выходных транзисторов в выводе или повреждению всего чипа Atmega. Часто это приводит к «мертвому» выводу в микроконтроллере, но оставшиеся микросхемы по-прежнему функционируют адекватно. По этой причине рекомендуется подключать выводы OUTPUT к другим устройствам через резисторы сопротивлением 470 Ом или 1 кОм, если для конкретного применения не требуется максимальный ток, снимаемый с выводов.

Функция pinMode ()

Функция pinMode () используется для настройки определенного вывода на поведение входа или выхода. Внутренние подтягивающие резисторы можно включить в режиме INPUT_PULLUP. Кроме того, режим INPUT явно отключает внутренние подтягивания.

pinMode () Синтаксис функции

Void setup () {
   pinMode (pin , mode);
}
  • pin — номер пина, режим которого вы хотите установить

  • режим — INPUT, OUTPUT или INPUT_PULLUP.

pin — номер пина, режим которого вы хотите установить

режим — INPUT, OUTPUT или INPUT_PULLUP.

пример

int button = 5 ; // button connected to pin 5
int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(button , INPUT_PULLUP); 
   // set the digital pin as input with pull-up resistor
   pinMode(button , OUTPUT); // set the digital pin as output
}

void setup () {
   If (digitalRead(button ) == LOW) // if button pressed {
      digitalWrite(LED,HIGH); // turn on led
      delay(500); // delay for 500 ms
      digitalWrite(LED,LOW); // turn off led
      delay(500); // delay for 500 ms
   }
}

Функция digitalWrite ()

Функция digitalWrite () используется для записи значения HIGH или LOW на цифровой вывод. Если вывод был сконфигурирован как OUTPUT с помощью pinMode () , его напряжение будет установлено на соответствующее значение: 5 В (или 3,3 В на платах 3,3 В) для ВЫСОКОГО, 0 В (заземление) для НИЗКОГО. Если вывод сконфигурирован как INPUT, digitalWrite () активирует (HIGH) или отключает (LOW) внутреннее подтягивание на входном выводе. Рекомендуется установить для pinMode () значение INPUT_PULLUP, чтобы включить внутренний подтягивающий резистор.

Если вы не установили pinMode () на OUTPUT и подключили светодиод к контакту, то при вызове digitalWrite (HIGH) светодиод может выглядеть тусклым. Без явной установки pinMode () digitalWrite () включит внутренний подтягивающий резистор, который действует как большой ограничивающий ток резистор.

Синтаксис функции digitalWrite ()

Void loop() {
   digitalWrite (pin ,value);
}
  • pin — номер пина, режим которого вы хотите установить

  • значение — ВЫСОКОЕ или НИЗКОЕ.

pin — номер пина, режим которого вы хотите установить

значение — ВЫСОКОЕ или НИЗКОЕ.

пример

int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(LED, OUTPUT); // set the digital pin as output
}

void setup () { 
   digitalWrite(LED,HIGH); // turn on led
   delay(500); // delay for 500 ms
   digitalWrite(LED,LOW); // turn off led
   delay(500); // delay for 500 ms
}

функция analogRead ()

Arduino может определить, есть ли напряжение на одном из его выводов, и сообщить об этом через функцию digitalRead (). Существует разница между датчиком включения / выключения (который обнаруживает присутствие объекта) и аналоговым датчиком, значение которого постоянно изменяется. Чтобы прочитать этот тип датчика, нам нужен другой тип булавки.

В правой нижней части платы Arduino вы увидите шесть выводов с пометкой «Analog In». Эти специальные контакты показывают не только напряжение, приложенное к ним, но и его значение. Используя функцию analogRead () , мы можем прочитать напряжение, приложенное к одному из выводов.

Эта функция возвращает число от 0 до 1023, которое представляет напряжения от 0 до 5 вольт. Например, если на вывод № 0 подается напряжение 2,5 В, analogRead (0) возвращает 512.

Синтаксис функции analogRead ()

analogRead(pin);
  • pin — номер вывода аналогового входа для чтения (от 0 до 5 на большинстве плат, от 0 до 7 на Mini и Nano, от 0 до 15 на Mega)

pin — номер вывода аналогового входа для чтения (от 0 до 5 на большинстве плат, от 0 до 7 на Mini и Nano, от 0 до 15 на Mega)

пример