Количество нажатий на кнопку. Код на Ардуино

Количество нажатий на кнопку. Код на Ардуино

Обнаружение изменения состояния кнопки - это важная задача при разработке проектов с использованием Arduino.
Этот процесс называется также обработкой событий (event handling) и позволяет отслеживать, когда кнопка была нажата или отпущена и сколько раз.
Этот пример Arduino показывает, как обнаруживать изменение состояния кнопки и подсчитывать количество нажатий кнопки.

Нам понадобятся:

  • Плата Arduino
  • Кнопка или выключатель
  • Резистор 10kОм
  • Провода
  • Макетная плата


Подключение 

Подсоедините три провода к плате.
Первый провод идет от одной из ножек кнопки через подтягивающий резистор (в данном случае 10 кОм) к земле.
Второй провод идет от соответствующей ножки кнопки к питанию +5 вольт.
Третий провод подключается к цифровому пину ввода/вывода (здесь пин 2), который считывает состояние кнопки.

Когда кнопка разомкнута (не нажата), между двумя ножками кнопки нет соединения, и пин подключен к земле (через подтягивающий резистор), и мы считываем LOW.
Когда кнопка нажата, она устанавливает соединение между своими двумя ножками, подключая пин к напряжению, и мы считываем HIGH. (При этом пин все равно подключен к земле, но резистор сопротивляется потоку тока, и идёт путём наименьшего сопротивления к +5 В.)

Если отключить цифровой пин ввода/вывода от всего, светодиод может начать мигать нерегулярно.
Это происходит потому, что вход "плавает" - то есть он не подключен ни к напряжению, ни к земле.
В этом случае он может возвращать случайно HIGH или LOW.
Вот почему в цепи необходим подтягивающий резистор.

Использование:
Загрузите код на плату Arduino.
Подключите кнопку к соответствующим пинам.
Откройте монитор порта в Arduino IDE.

Приведенная ниже схема непрерывно считывает состояние кнопки. Затем она сравнивает состояние кнопки с состоянием, которое она имела в прошлый раз в главном цикле. Если текущее состояние кнопки отличается от предыдущего состояния кнопки и текущее состояние кнопки равно HIGH, то кнопка перешла из состояния выключено в состояние включено. Затем схема увеличивает счетчик нажатий кнопки.

Схема также проверяет значение счетчика нажатий кнопки, и если оно является четным кратным четырем, она включает светодиод на пине 13. В противном случае она его выключает.
Этот пример полезен, когда вам нужно отслеживать количество событий (например, нажатий кнопки) и выполнять определенные действия при определенных условиях.

Схема подключения

 

/*
  Обнаружение изменения состояния (детектирование фронта)
  Зачастую вам не нужно знать состояние цифрового входа постоянно, нужно узнать, когда вход переходит из одного состояния в другое.
  Например, вам нужно знать, когда кнопка переходит из ВЫКЛ в ВКЛ. Это называется обнаружением изменения состояния или детектированием фронта.
  В этом примере показано, как обнаружить, когда кнопка изменяет состояние с выключенного на включенное и обратно.

  Схема:
  - кнопка, подключенная к пину 2 и питанию +5V
  - резистор 10 кОм, подключенный к пину 2 и земле
  - светодиод, подключенный с пином 13 через резистор 220 Ом к земле (или можно использовать встроенный светодиод на большинстве плат Arduino)

*/

// эта константа не будет изменяться:
const int buttonPin = 2;  // пин, к которому подключена кнопка
const int ledPin = 13;    // пин, к которому подключен светодиод

// Изменяющиеся переменные:
int buttonPushCounter = 0;  // счетчик количества нажатий на кнопку
int buttonState = 0;        // текущее состояние кнопки
int lastButtonState = 0;    // предыдущее состояние кнопки

void setup() {
  // инициализация пина кнопки как вход:
  pinMode(buttonPin, INPUT);
  // инициализация пина светодиода как выход:
  pinMode(ledPin, OUTPUT);
  // инициализация последовательной связи:
  Serial.begin(9600);
}

void loop() {
  // чтение состояния пина кнопки:
  buttonState = digitalRead(buttonPin);

  // сравнение состояния кнопки с предыдущим состоянием
  if (buttonState != lastButtonState) {
    // если состояние изменилось, увеличиваем счетчик
    if (buttonState == HIGH) {
      // если текущее состояние HIGH, значит кнопка перешла с выключенного на включенное:
      buttonPushCounter++;
      Serial.println("включено");
      Serial.print("количество нажатий на кнопку: ");
      Serial.println(buttonPushCounter);
    } else {
      // если текущее состояние LOW, значит кнопка перешла с включенного на выключенное:
      Serial.println("выключено");
    }
    // Небольшая задержка для устранения дребезга
    delay(50);
  }
  // сохраняем текущее состояние как предыдущее состояние для следующей итерации
  lastButtonState = buttonState;

  // включаем светодиод при каждом четвертом нажатии кнопки, проверяя остаток от деления счетчика нажатий на кнопку на 4.
  // Функция modulo дает остаток от деления двух чисел:
  if (buttonPushCounter % 4 == 0) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

 

5 примеров использования:

Умный домашний свет: Вы можете использовать этот код для управления освещением в вашем умном доме. Подключите кнопку к плате Arduino и настройте ее для включения и выключения светодиодов, ламп или других источников света.

Замок с кодовым доступом: Вы можете преобразовать этот код в систему управления электронным замком с кодовым доступом. Подключите кнопку к Arduino, и когда введен правильный код, замок откроется.

 Система счетчика посетителей: Используйте этот код для создания системы счетчика посетителей. Подключите кнопку к входу Arduino и установите ее у входа в магазин или офис, чтобы отслеживать, сколько людей входит и выходит.

 Работа с музыкальным проигрывателем: Подключите кнопку к Arduino и используйте ее для управления музыкальным проигрывателем.
Например, вы можете настроить кнопку для воспроизведения, паузы и переключения треков.

Управление множественными устройствами: Вы можете управлять несколькими устройствами, такими как светодиоды, реле или дверь, с помощью этой кнопки. Каждое нажатие кнопки может переключать состояние устройств.

Дополнительные материалы по теме
Подключение кнопки к ардуино
TTP223 сенсорная кнопка
Резистивные кнопки
Управление одной кнопкой на ESP
Первая программа на Arduino. Aрдуино для начинающих
Digital Read Arduino
Управление светодиодами кнопкой на Ардуино
Кнопка, дребезг контактов при нажатии
input pullup arduino кнопка
Analog Read Arduino
Ардуино аналоговый вход Чтение аналогового напряжения