Библиотека GyverButton

Библиотека GyverButton 2.15

  • Все темы в "разделе помощи" были преобразованы в ВОПРОСЫ. У вопроса можно выбрать ответ юзера в качестве лучшего ответа, и статус темы автоматически сменится на РЕШЕНО. Если ваш вопрос был решён - просьба пометить ответ, тем самым показав остальным, что он не актуален!
Screenshot_3.jpg

Библиотека создана для максимально простого и удобного получения всех возможностей обычной кнопки: клик, удержание, несколько нажатий и изменение переменной при удержании с шагом по времени. В десятки раз упростит и укоротит ваш код.
  • Работа с нормально замкнутыми и нормально разомкнутыми кнопками
  • Работа с подключением PULL_UP и PULL_DOWN
  • Опрос кнопки с программным антидребезгом контактов
  • Настраиваемое время антидребезга
  • Отработка нажатия, удерживания, отпускания, клика по кнопке
  • Настраиваемый таймаут удержания
  • Отработка одиночного, двойного и тройного нажатия (вынесено отдельно)
  • Отработка любого количества нажатий кнопки (функция возвращает количество нажатий)
  • Настраиваемый таймаут повторного нажатия/удержания
  • Функция изменения значения переменной с заданным шагом и заданным интервалом по времени
  • Возможность опрашивать не кнопку, а напрямую давать величину (все возможности библиотеки для матричных и резистивных клавиатур)
Функции и методы
C++:
GButton(uint8_t pin);
// класс кнопки, принимает пин
    
GButton(uint8_t PIN, boolean type, boolean dir);   
// класс кнопки, принимает PIN пин, тип type (HIGH_PULL / LOW_PULL) и направление dir (NORM_OPEN / NORM_CLOSE)
// HIGH_PULL - кнопка подключена к GND, пин подтянут к VCC, pinMode - INPUT_PULLUP (по умолчанию)
// LOW_PULL - кнопка подключена к VCC, пин подтянут к GND, pinMode - INPUT
// NORM_OPEN - кнопка по умолчанию разомкнута
// NORM_CLOSE - кнопка по умолчанию замкнута
                                                    
void setDebounce(uint16_t debounce);           // установка времени антидребезга (по умолчанию 80 мс)
void setTimeout(uint16_t timeout);             // установка таймаута удержания (по умолчанию 500 мс)   
void setStepTimeout(uint16_t step_timeout);    // установка таймаута между инкрементами (по умолчанию 400 мс)   
void setType(boolean type);                    // установка типа кнопки (HIGH_PULL - подтянута к питанию, LOW_PULL - к gnd)   
void setDirection(boolean dir);                // установка направления (разомкнута/замкнута по умолчанию - NORM_OPEN, NORM_CLOSE)   
    
void setTickMode(boolean tickMode);            // (MANUAL / AUTO) ручной или автоматический опрос кнопки функцией tick()   
                                               // MANUAL - нужно вызывать функцию tick() вручную                                                       
                                               // AUTO - tick() входит во все остальные функции и опрашивается сама
    
void tick();                                   // опрос кнопки   
void tick(boolean state);                      // опрос внешнего значения (0 нажато, 1 не нажато) (для матричных, резистивных клавиатур и джойстиков)
    
boolean isPress();      // возвращает true при нажатии на кнопку. Сбрасывается после вызова
boolean isRelease();    // возвращает true при отпускании кнопки. Сбрасывается после вызова
boolean isClick();      // возвращает true при клике. Сбрасывается после вызова
boolean isHolded();     // возвращает true при удержании дольше timeout. Сбрасывается после вызова
boolean isHold();       // возвращает true при нажатой кнопке, не сбрасывается
boolean state();        // возвращает состояние кнопки

boolean isSingle();     // возвращает true при одиночном клике. Сбрасывается после вызова
boolean isDouble();     // возвращает true при двойном клике. Сбрасывается после вызова
boolean isTriple();     // возвращает true при тройном клике. Сбрасывается после вызова
    
boolean hasClicks();    // проверка на наличие кликов. Сбрасывается после вызова
uint8_t getClicks();    // вернуть количество кликов
    
boolean isStep();       // возвращает true по таймеру setStepTimeout, смотри пример
Пример использования, отработка 1, 2 и 3 нажатий
C++:
/*
   Пример использования библиотеки GyverButton, 1- 2- 3- нажатие
*/

#define PIN 3                // кнопка подключена сюда (PIN --- КНОПКА --- GND)

#include "GyverButton.h"
GButton butt1(PIN);

void setup() {
  Serial.begin(9600);
}

void loop() {
  butt1.tick();  // обязательная функция отработки. Должна постоянно опрашиваться

  if (butt1.isSingle()) Serial.println("Single");     // проверка на один клик
  if (butt1.isDouble()) Serial.println("Double");     // проверка на двойной клик
  if (butt1.isTriple()) Serial.println("Triple");     // проверка на тройной клик
}
Пример использования, отработка любого числа нажатий
C++:
/*
   Пример использования библиотеки GyverButton, отработка любого количества нажатий
*/

#define PIN 3                // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(PIN);

void setup() {
  Serial.begin(9600);
  butt1.setTimeout(400);   // настройка таймаута на удержание и второй клик (по умолчанию 500 мс)
}

void loop() {
  butt1.tick();  // обязательная функция отработки. Должна постоянно опрашиваться

  if (butt1.hasClicks())                  // проверка на наличие нажатий
    Serial.println(butt1.getClicks());    // получить (и вывести) число нажатий
}
Пример использования, инкремент по удержанию кнопки
C++:
/*
   Пример использования библиотеки GyverButton, управляем переменной value при помощи двух кнопок
   Конструкция с isIncr делает увеличение/уменьшение переменной при нажатой кнопке с шагом по времени
*/

#define BTN1 2                // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN2 3        // кнопка подключена сюда (PIN --- КНОПКА --- GND)

#include "GyverButton.h"
GButton butt1(BTN1);
GButton butt2(BTN2);
int value = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  butt1.tick();  // обязательная функция отработки. Должна постоянно опрашиваться
  butt2.tick();  // обязательная функция отработки. Должна постоянно опрашиваться

  if (butt1.isClick()) {           // одиночное нажатие
    value++;                       // инкремент
    Serial.println(value);         // для примера выведем в порт
  }

  if (butt2.isClick()) {           // одиночное нажатие
    value--;                       // декремент
    Serial.println(value);         // для примера выведем в порт
  }

  if (butt1.isStep()) {            // обработчик удержания с шагами
    value++;                       // увеличивать/уменьшать переменную value с шагом и интервалом!
    Serial.println(value);         // для примера выведем в порт
  }

  if (butt2.isStep()) {            // обработчик удержания с шагами
    value--;                       // увеличивать/уменьшать переменную value с шагом и интервалом!
    Serial.println(value);         // для примера выведем в порт
  }
}
Автор
AlexGyver
Скачивания
3,511
Просмотры
3,511
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя AlexGyver

Последние обновления

  1. Улучшена стабильность

    Улучшена стабильность
  2. Добавлена куча всего

    Новые функции и режимы
  3. Много обновлений

    Добавилась возможность настроить тип подключения кнопки и сам тип кнопки HIGH_PULL //...