Цифровые выводы Arduino при помощи функции pinMode могут быть установлены либо как вход (режим INPUT), либо как выход (режим OUTPUT).
Установленные в режим OUTPUT выводы Arduino, находятся в высокоимпедансном состоянии, т.е. вывод может пропускать через себя ток (до 40 мА). Такого значения тока достаточно для питания небольших внешних цепей (например, светодиода), но не для питания требовательных к значению тока элементов (например, моторов). ОСТОРОЖНО: при такой настройке вывода, он может быть поврежден как при замыкании его на землю так и на питание.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
const int button_pin = 2; // вывод 2 Arduino, к нему подключена кнопка const int led_pin = 13; // вывод 13 Arduino, к нему подключён, установленный на плату светодиод volatile boolean button_state = LOW; // переменная для считывания состояния кнопки void setup() { pinMode(led_pin, OUTPUT); // вывод 13 (светодиод) конфигуриуем как выход pinMode(button_pin, INPUT); // вывод 2 (кнопка) конфигуриуем как вход attachInterrupt(0, interrupt, CHANGE); // прерывание по вектору interrupt } void loop() { // пустой цикл } void interrupt() { button_state = digitalRead(button_pin); // считывание состояния кнопки digitalWrite(led_pin, button_state); // зажигаем/гасим светодиод по нажатию на кнопку } |
В данном примере в функции setup() задаётся режим работы цифрового вывода № 13 Arduino — как выход (светодиод) и вывода № 2 — как вход (кнопка). Также устанавливается прерывание, при нажатии на кнопку. К выводу № 2 через резистор 10 кОм подключается тактовая кнопка. Функция loop() — пустая. Вся логика программы сосредоточена в обработчике прерывания — функции interrupt. При нажатии на кнопку срабатывает прерывание, в котором считывается состояние кнопки (нажата или нет). Далее, в соответствии с состоянием кнопки, зажигается/гасится светодиод, установленный на плате Arduino.