Кнопка – самый базовый элемент ввода данных в микроконтроллер, используется для управления электронным устройством. Функционально кнопка замыкает контакт при нажатии, что может быть использовано для передачи через неё электрического сигнала на пин МК- он читает значение пина и таким образом понимает, нажата кнопка или нет.
![]() |
В наборе GyverKIT | START | IOT | EXTRA |
---|---|---|---|---|
Кнопка | ✔ | ✔ |
Большие кнопки не очень приспособлены для подключения на макетной плате: у них очень широкие изогнутые ножки, которые туго входят в отверстия. Можно выпрямить их, а затем скрутить на 90 градусов при помощи пинцета. Так они не будут излишне растягивать контакты платы. Вторую пару ножек можно отогнуть или откусить кусачками.
Подключение к модулям #
Кнопка может быть использована для управления модулями с логическим входом: реле, транзистор и другим подобным. Рассмотрим подключение при питании от сетевого адаптера:
Подключение к Arduino #
Кнопка может быть подключена на любой цифровой пин:
Модуль кнопки #
Подключается к питанию и цифровому пину. На плате пин кнопки подтянут к GND:
- При нажатии кнопка выдаёт сигнал
HIGH
- Режим работы пина должен быть
INPUT
(а не с подтяжкой к питанию, как у обычной кнопки!)
Программирование #
Работа с пинами и ручной опрос кнопки разобраны в уроках:
Библиотеки #
Для удобной работы с кнопками можно использовать библиотеки, например EncButton, её можно установить/обновить из встроенного менеджера библиотек Arduino по названию EncButton. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Для работы библиотеки нужно вызывать метод tick()
в loop()
и опрашивать нужные события. Их там много - смотрите документацию.
Кнопка управляет светодиодом
/*
Кнопка на D3. Переключаем светодиод по клику
*/
#include <EncButton.h>
// подключаем кнопку на D3
Button btn1(3);
void setup() {
// пин 13 как выход (для мигания светодиодом)
pinMode(13, OUTPUT);
}
void loop() {
// опрос кнопки происходит здесь
btn1.tick();
// клик по кнопке - переключить светодиод на 13 пине
if (btn1.click()) digitalWrite(13, !digitalRead(13));
}
Две кнопки, разные действия
/*
Кнопки на D2 и D3. Выполняем всякие действия
по нажатию и удержанию
*/
#include <EncButton.h>
// подключаем кнопки на пины D2 и D3
Button btn1(2);
Button btn2(3);
void setup() {
// открываем порт для связи
Serial.begin(115200);
// пин 13 как выход (для мигания светодиодом)
pinMode(13, OUTPUT);
}
void loop() {
// опрос кнопок происходит здесь
btn1.tick();
btn2.tick();
// клик по первой кнопке - вывод текста
if (btn1.click()) Serial.println("btn 1 click!");
// удержание первой кнопки - вывод текста
if (btn1.held()) Serial.println("btn 1 holded!");
// клик по второй кнопке - переключить светодиод на 13 пине
if (btn2.click()) digitalWrite(13, !digitalRead(13));
}
Две кнопки меняют значение переменной
/*
Кнопки на D2 и D3. Меняем значение переменной
*/
#include <EncButton.h>
// подключаем кнопки на пины D2 и D3
Button btn1(2);
Button btn2(3);
// эту переменную будем менять
int value = 0;
void setup() {
// открываем порт для связи
Serial.begin(115200);
}
void loop() {
// опрос кнопок происходит здесь
btn1.tick();
btn2.tick();
// клик по кнопке - меняем значение и выводим в порт
if (btn1.click()) {
value += 10;
Serial.println(value);
}
if (btn2.click()) {
value -= 10;
Serial.println(value);
}
}
Кнопка управляет яркостью светодиода
/*
Кнопка на D3. Управляем яркостью светодиода
на 13 пине. Используется программный ШИМ
*/
#include <EncButton.h>
// подключаем кнопку на D3
Button btn1(3);
void setup() {
// пин 13 как выход (для мигания светодиодом)
pinMode(13, OUTPUT);
}
int bright = 0; // храним яркость
int speed = 5; // скорость яркости
void loop() {
// опрос кнопки происходит здесь
btn1.tick();
// шим на 13 пине
softPWM(13, bright);
// клик по кнопке - переключить направление яркости
if (btn1.press()) speed = -speed;
// удержание - импульсное изменение яркости
if (btn1.step()) bright = constrain(bright + speed, 0, 255);
}
// софт шим
void softPWM(byte pin, byte val) {
static byte count;
count++;
if (count == 0 && val != 0) digitalWrite(pin, 1);
if (count == val) digitalWrite(pin, 0);
}
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])
- Поддержать автора за работу над уроками