Цифровые выводы Arduino при помощи функции pinMode могут быть установлены либо как вход (режим INPUT), либо как выход (режим OUTPUT).
Установленные в режим INPUT выводы Arduino, находятся в высокоимпедансном состоянии, т.е. вывод даёт маленькую нагрузку на схему, в цепь которой он включён. Подключённый к выводу микросхемы резистор 100 МОм является эквивалентом внутреннему сопротивлению. Таким образом, для перевода порта ввода из одного состояния в другое требуется маленькое значение тока, что позволяет использовать выводы Arduino для подключения различных датчиков.
Пример:
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.