// Пример использования библиотеки GyverButton, все возможности в одном скетче.
#define BTN_PIN 3 // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(BTN_PIN);
// Варианты инициализации:
// GButton btn; // без привязки к пину (виртуальная кнопка) и без указания типа (по умолч. HIGH_PULL и NORM_OPEN)
// GButton btn(пин); // с привязкой к пину и без указания типа (по умолч. HIGH_PULL и NORM_OPEN)
// GButton btn(пин, тип подключ.); // с привязкой к пину и указанием типа подключения (HIGH_PULL / LOW_PULL) и без указания типа кнопки (по умолч. NORM_OPEN)
// GButton btn(пин, тип подключ., тип кнопки); // с привязкой к пину и указанием типа подключения (HIGH_PULL / LOW_PULL) и типа кнопки (NORM_OPEN / NORM_CLOSE)
// GButton btn(BTN_NO_BTN_PIN, тип подключ., тип кнопки); // без привязки к пину и указанием типа подключения (HIGH_PULL / LOW_PULL) и типа кнопки (NORM_OPEN / NORM_CLOSE)
int value = 0;
int flag1 = 0;
float timer=0;
void setup() {
butt1.setDebounce(50); // настройка антидребезга (по умолчанию 80 мс)
butt1.setTimeout(500); // настройка таймаута на удержание (по умолчанию 500 мс)
butt1.setClickTimeout(300); // настройка таймаута между кликами (по умолчанию 300 мс)
// HIGH_PULL - кнопка подключена к GND, пин подтянут к VCC (BTN_PIN --- КНОПКА --- GND)
// LOW_PULL - кнопка подключена к VCC, пин подтянут к GND
// по умолчанию стоит HIGH_PULL
butt1.setType(HIGH_PULL);
// NORM_OPEN - нормально-разомкнутая кнопка
// NORM_CLOSE - нормально-замкнутая кнопка
// по умолчанию стоит NORM_OPEN
butt1.setDirection(NORM_OPEN);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
butt1.tick(); // обязательная функция отработки. Должна постоянно опрашиваться
if (flag1 == 0) {
if (butt1.isClick()) { // проверка на один клик
digitalWrite(LED_BUILTIN, LOW);
flag1 = 1;
timer = millis();
}
if (butt1.isHold()) { // проверка на долгий клик
digitalWrite(LED_BUILTIN, LOW);
timer = millis();
}
}
if (flag1 == 1) {
if (butt1.isHold()) { // проверка на долгий клик
digitalWrite(LED_BUILTIN, HIGH);
timer = millis();
}
}
if (millis() >= timer + 1000) {
timer = millis();
flag1 = 0;
}
}