View Categories

Кнопка

Кнопка – самый базовый элемент ввода данных в микроконтроллер, используется для управления электронным устройством. Функционально кнопка замыкает контакт при нажатии, что может быть использовано для передачи через неё электрического сигнала на пин МК- он читает значение пина и таким образом понимает, нажата кнопка или нет.

В наборе 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);
}

Полезные страницы #

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх