Микроконтроллеры ATmega, установленные на плату Arduino имеют внутренние подтягивающие резисторы 20 кОм (резисторы, которые подключаются к питанию). Их можно использовать их вместо внешних подтягивающих резисторов, для этого необходимо в функции pinMode () задать аргумент INPUT_PULLUP.
Выводы, сконфигурированные как входы (INPUT или INPUT_PULLUP), могут быть повреждены, если они подключены к отрицательному напряжению или выше предельного уровня (5 вольт или 3 вольта).
Пример:
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, к нему подключена кнопка volatile boolean button_state = false; // переменная для считывания состояния кнопки void setup() { pinMode(LED_BUILTIN, OUTPUT); // инициализация цифрового вывода LED_BUILTIN как выход pinMode(button_pin, INPUT_PULLUP); // вывод 2 (кнопка) конфигуриуем как вход и задействуем внутренний подтягивающие резистор attachInterrupt(0, interrupt, CHANGE); // прерывание по вектору interrupt } void loop() { digitalWrite(led_pin, button_state); // зажигаем/гасим светодиод по состоянию переменной button_state } void interrupt() { button_state = !button_state; // меняем значение переменной при нажатии на кнопку } // Использование подтягивающего резистора означает, что логика кнопки инвертирована. Это значит, что будет HIGH, когда кнопка НЕ нажата, и LOW, когда она нажата |
В данном примере в функции setup() задаётся режим работы цифрового вывода № 13 Arduino – как выход (светодиод) и вывода № 2 – как вход (кнопка + используется внутренний подтягивающий резистор). Также устанавливается прерывание, при нажатии на кнопку. Функция loop() – пустая. Вся логика программы сосредоточена в обработчике прерывания – функции interrupt. При нажатии на кнопку срабатывает прерывание, в котором считывается состояние кнопки (нажата или нет). Далее, в соответствии с состоянием кнопки, зажигается/гасится светодиод, установленный на плате Arduino.