цифровая электроника
вычислительная техника
встраиваемые системы

 

Arduino и одна многофункциональная кнопка

Автор: Mike(admin) от 23-10-2018, 18:35

Arduino представляет собой довольно универсальную микроконтроллерную платформу, которая позволяет подключать немалое количество как средств ввода информации, так и вывода. Впрочем, количество линий ввода/вывода все равно не слишком велико, и в некоторых случаях приходится пользоваться хитрыми приемами, например, расширением портов. Но иногда этот способ может быть дорогим или не совсем практичным.


Arduino и одна многофункциональная кнопка

Еще одним вариантом может быть сокращение средств ввода информации. Например, можно сделать так, чтобы с помощью одной кнопки можно было вводить различную информацию, то есть реализовать концепцию многофункциональной кнопки.


Суть данной концепции заключается в том, что при различном характере нажатия кнопки (одно быстрое нажатие, два быстрых нажатия, одно долговременное нажатие) в цифровую систему поступала бы различная информация. Такую многофункциональную кнопку с Arduino можно реализовать с помощью библиотеки OneButton (https://github.com/mathertel/OneButton). Для ознакомления с принципом работы данной библиотеки можно собрать простую схему, подключив кнопку к линии A1 платы Arduino и светодиод к линии D13 платы Arduno. Различные способы нажатия на кнопку будут влиять на поведение светодиода. Ниже приведен пример кода программы для работы с библиотекой OneButton.



#include "OneButton.h"
// Действия со светодиодом
typedef enum {
  ACTION_OFF,  // выключить светодиод
  ACTION_ON,   // включить светодиод
  ACTION_SLOW, // медленное мигание светодиода
  ACTION_FAST  // быстрое мигание светодиода
} 
 
MyActions;
// Назначение OneButton на линию A1.  
OneButton button(A1, true);
MyActions nextAction = ACTION_OFF; // без действий при старте
// код настройки
void setup() {
  // активировать стандартный светодиод на выводе 13
  pinMode(13, OUTPUT);      // устанавливаем цифровой вывод в качестве выхода
  // связать функцию myClickFunction с вызовом события одного нажатия   
  button.attachClick(myClickFunction);
  // связать функцию doubleclick с вызовом события двойного нажатия   
  button.attachDoubleClick(myDoubleClickFunction);
  // установить 80 мс. время дребезга контактов. Значение по умолчанию - 50 мс.
  button.setDebounceTicks(80);
} // конец настройки
// основной код в бесконечном цикле 
void loop() {
  unsigned long now = millis();
  // следить за нажатием кнопки:
  button.tick();
  // Вы можете реализовать другой код здесь или просто подождать некоторое время 
  if (nextAction == ACTION_OFF) {
    // ничего не делать
    digitalWrite(13, LOW);
  } else if (nextAction == ACTION_ON) {
    // включить светодиод
    digitalWrite(13, HIGH);
  } else if (nextAction == ACTION_SLOW) {
    // медленно мигать
    if (now % 1000 < 500) {
      digitalWrite(13, LOW);
    } else {
      digitalWrite(13, HIGH);
    }
  } else if (nextAction == ACTION_FAST) {
    // быстро мигать
    if (now % 200 < 100) {
      digitalWrite(13, LOW);
    } else {
      digitalWrite(13, HIGH);
    }
  }
} // конец бесконечного цикла
// эта функция будет вызываться, когда кнопка была нажата 1 раз, и прошло некоторое время
void myClickFunction() {
  if (nextAction == ACTION_OFF)
    nextAction = ACTION_ON;
  else
    nextAction = ACTION_OFF;
} // myClickFunction
// эта функция будет вызываться, когда кнопка была нажата 2 раза за короткий промежуток времени
void myDoubleClickFunction() {
  if (nextAction == ACTION_ON) {
    nextAction = ACTION_SLOW;
  } else if (nextAction == ACTION_SLOW) {
    nextAction = ACTION_FAST;
  } else if (nextAction == ACTION_FAST) {
    nextAction = ACTION_ON;
  }
} // myDoubleClickFunction



© digitrode.ru


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий