This commit is contained in:
Alex
2019-06-13 14:03:00 +03:00
parent 53b74e6db4
commit 7612db75b1
496 changed files with 202963 additions and 24 deletions

View File

@@ -0,0 +1,184 @@
#include "GyverButton.h"
#include <Arduino.h>
GButton::GButton(uint8_t pin) {
_PIN = pin;
GButton::init();
}
GButton::GButton(uint8_t pin, boolean type, boolean dir) {
_PIN = pin;
GButton::init();
GButton::setType(type);
flags.inv_state = dir;
}
void GButton::init() {
_debounce = 60;
_timeout = 500;
_step_timeout = 400;
_click_timeout = 300;
flags.inv_state = NORM_OPEN;
flags.mode = false;
flags.type = false;
flags.tickMode = false;
GButton::setType(HIGH_PULL);
}
void GButton::setDebounce(uint16_t debounce) {
_debounce = debounce;
}
void GButton::setTimeout(uint16_t timeout) {
_timeout = timeout;
}
void GButton::setClickTimeout(uint16_t timeout) {
_click_timeout = timeout;
}
void GButton::setStepTimeout(uint16_t step_timeout) {
_step_timeout = step_timeout;
}
void GButton::setType(boolean type) {
flags.type = type;
if (type) pinMode(_PIN, INPUT);
else pinMode(_PIN, INPUT_PULLUP);
}
void GButton::setDirection(boolean dir) {
flags.inv_state = dir;
}
void GButton::setTickMode(boolean tickMode) {
flags.tickMode = tickMode;
}
boolean GButton::isPress() {
if (flags.tickMode) GButton::tick();
if (flags.isPress_f) {
flags.isPress_f = false;
return true;
} else return false;
}
boolean GButton::isRelease() {
if (flags.tickMode) GButton::tick();
if (flags.isRelease_f) {
flags.isRelease_f = false;
return true;
} else return false;
}
boolean GButton::isClick() {
if (flags.tickMode) GButton::tick();
if (flags.isOne_f) {
flags.isOne_f = false;
return true;
} else return false;
}
boolean GButton::isHolded() {
if (flags.tickMode) GButton::tick();
if (flags.isHolded_f) {
flags.isHolded_f = false;
return true;
} else return false;
}
boolean GButton::isHold() {
if (flags.tickMode) GButton::tick();
if (flags.step_flag) return true;
else return false;
}
boolean GButton::state() {
if (flags.tickMode) GButton::tick();
return flags.btn_state;
}
boolean GButton::isSingle() {
if (flags.tickMode) GButton::tick();
if (flags.counter_flag && last_counter == 1) {
flags.counter_flag = false;
return true;
} else return false;
}
boolean GButton::isDouble() {
if (flags.tickMode) GButton::tick();
if (flags.counter_flag && last_counter == 2) {
flags.counter_flag = false;
return true;
} else return false;
}
boolean GButton::isTriple() {
if (flags.tickMode) GButton::tick();
if (flags.counter_flag && last_counter == 3) {
flags.counter_flag = false;
return true;
} else return false;
}
boolean GButton::hasClicks() {
if (flags.tickMode) GButton::tick();
if (flags.counter_flag) {
flags.counter_flag = false;
return true;
} else return false;
}
uint8_t GButton::getClicks() {
return last_counter;
}
boolean GButton::isStep() {
if (flags.tickMode) GButton::tick();
if (flags.step_flag && (millis() - btn_timer >= _step_timeout)) {
btn_timer = millis();
return true;
}
else return false;
}
void GButton::tick(boolean state) {
flags.mode = true;
flags.btn_state = state ^ flags.inv_state;
GButton::tick();
flags.mode = false;
}
void GButton::tick() {
// читаем пин
if (!flags.mode) flags.btn_state = !digitalRead(_PIN) ^ (flags.inv_state ^ flags.type);
// нажатие
if (flags.btn_state && !flags.btn_flag) {
if (!flags.btn_deb) {
flags.btn_deb = true;
btn_timer = millis();
} else {
if (millis() - btn_timer >= _debounce) {
flags.btn_flag = true;
flags.isPress_f = true;
flags.oneClick_f = true;
}
}
} else {
flags.btn_deb = false;
}
// отпускание
if (!flags.btn_state && flags.btn_flag) {
flags.btn_flag = false;
if (!flags.hold_flag) btn_counter++;
flags.hold_flag = false;
flags.isRelease_f = true;
btn_timer = millis();
flags.step_flag = false;
if (flags.oneClick_f) {
flags.oneClick_f = false;
flags.isOne_f = true;
}
}
// кнопка удерживается
if (flags.btn_flag && flags.btn_state && (millis() - btn_timer >= _timeout) && !flags.hold_flag) {
flags.hold_flag = true;
btn_counter = 0;
last_counter = 0;
flags.isHolded_f = true;
flags.step_flag = true;
flags.oneClick_f = false;
btn_timer = millis();
}
// обработка накликивания
if ((millis() - btn_timer >= _click_timeout) && (btn_counter != 0)) {
last_counter = btn_counter;
btn_counter = 0;
flags.counter_flag = true;
}
}

View File

@@ -0,0 +1,104 @@
#ifndef GyverButton_h
#define GyverButton_h
#include <Arduino.h>
/*
GyverButton - библиотека для многофункциональной отработки нажатия кнопки. Возможности:
- Работа с нормально замкнутыми и нормально разомкнутыми кнопками
- Работа с подключением PULL_UP и PULL_DOWN
- Опрос кнопки с программным антидребезгом контактов
- Настраиваемое время антидребезга
- Отработка нажатия, удерживания, отпускания, клика по кнопке
- Настраиваемый таймаут удержания
- Отработка одиночного, двойного и тройного нажатия (вынесено отдельно)
- Отработка любого количества нажатий кнопки (функция возвращает количество нажатий)
- Настраиваемый таймаут повторного нажатия/удержания
- Функция изменения значения переменной с заданным шагом и заданным интервалом по времени
- Возможность опрашивать не кнопку, а напрямую давать величину (все возможности библиотеки для матричных и резистивных клавиатур)
Текущая версия: 2.12 от 18.03.2019:
- Поправлены баги при совместной работе методов опроса
*/
#pragma pack(push,1)
typedef struct
{
bool btn_state: 1;
bool btn_deb: 1;
bool btn_flag: 1;
bool hold_flag: 1;
bool counter_flag: 1;
bool isHolded_f: 1;
bool isRelease_f: 1;
bool isPress_f: 1;
bool step_flag: 1;
bool oneClick_f: 1;
bool isOne_f: 1;
bool inv_state: 1;
bool mode: 1;
bool type: 1;
bool tickMode: 1;
} GyverButtonFlags;
#pragma pack(pop)
class GButton
{
public:
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); // установка таймаута удержания (по умолчанию 300 мс)
void setClickTimeout(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, смотри пример
private:
void init();
GyverButtonFlags flags;
uint8_t _PIN = 0;
uint16_t _debounce = 0;
uint16_t _timeout = 0;
uint16_t _click_timeout = 0;
uint16_t _step_timeout = 0;
uint8_t btn_counter = 0, last_counter = 0;
uint32_t btn_timer = 0;
};
#define HIGH_PULL 0
#define LOW_PULL 1
#define NORM_OPEN 0
#define NORM_CLOSE 1
#define MANUAL 0
#define AUTO 1
#endif

View File

@@ -0,0 +1,50 @@
/*
Пример использования библиотеки GyverButton, все возможности в одном скетче.
*/
#define PIN 3 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(PIN);
// GButton butt1(PIN, HIGH_PULL, NORM_OPEN); // можно инициализировать так
int value = 0;
void setup() {
Serial.begin(9600);
butt1.setDebounce(50); // настройка антидребезга (по умолчанию 80 мс)
butt1.setTimeout(300); // настройка таймаута на удержание (по умолчанию 500 мс)
butt1.setClickTimeout(600); // настройка таймаута между кликами (по умолчанию 300 мс)
// HIGH_PULL - кнопка подключена к GND, пин подтянут к VCC (PIN --- КНОПКА --- GND)
// LOW_PULL - кнопка подключена к VCC, пин подтянут к GND
butt1.setType(HIGH_PULL);
// NORM_OPEN - нормально-разомкнутая кнопка
// NORM_CLOSE - нормально-замкнутая кнопка
butt1.setDirection(NORM_OPEN);
}
void loop() {
butt1.tick(); // обязательная функция отработки. Должна постоянно опрашиваться
if (butt1.isClick()) Serial.println("Click"); // проверка на один клик
if (butt1.isSingle()) Serial.println("Single"); // проверка на один клик
if (butt1.isDouble()) Serial.println("Double"); // проверка на двойной клик
if (butt1.isTriple()) Serial.println("Triple"); // проверка на тройной клик
if (butt1.hasClicks()) // проверка на наличие нажатий
Serial.println(butt1.getClicks()); // получить (и вывести) число нажатий
if (butt1.isPress()) Serial.println("Press"); // нажатие на кнопку (+ дебаунс)
if (butt1.isRelease()) Serial.println("Release"); // отпускание кнопки (+ дебаунс)
if (butt1.isHolded()) Serial.println("Holded"); // проверка на удержание
if (butt1.isHold()) Serial.println("Holding"); // проверка на удержание
//if (butt1.state()) Serial.println("Hold"); // возвращает состояние кнопки
if (butt1.isStep()) { // если кнопка была удержана (это для инкремента)
value++; // увеличивать/уменьшать переменную value с шагом и интервалом
Serial.println(value); // для примера выведем в порт
}
}

View File

@@ -0,0 +1,53 @@
/*
Пример использования библиотеки GyverButton, все возможности в одном скетче.
*/
#define PIN 3 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(PIN);
// GButton butt1(PIN, HIGH_PULL, NORM_OPEN); // можно инициализировать так
int value = 0;
void setup() {
Serial.begin(9600);
butt1.setDebounce(90); // настройка антидребезга (по умолчанию 80 мс)
butt1.setTimeout(300); // настройка таймаута на удержание (по умолчанию 500 мс)
// HIGH_PULL - кнопка подключена к GND, пин подтянут к VCC (PIN --- КНОПКА --- GND)
// LOW_PULL - кнопка подключена к VCC, пин подтянут к GND
butt1.setType(HIGH_PULL);
// NORM_OPEN - нормально-разомкнутая кнопка
// NORM_CLOSE - нормально-замкнутая кнопка
butt1.setDirection(NORM_OPEN);
// MANUAL - нужно вызывать функцию tick() вручную
// AUTO - tick() входит во все остальные функции и опрашивается сама!
butt1.setTickMode(AUTO);
}
void loop() {
// butt1.tick(); // не нужна, в этом режиме (AUTO) она входит в каждую функцию
if (butt1.isClick()) Serial.println("Click"); // проверка на один клик
if (butt1.isSingle()) Serial.println("Single"); // проверка на один клик
if (butt1.isDouble()) Serial.println("Double"); // проверка на двойной клик
if (butt1.isTriple()) Serial.println("Triple"); // проверка на тройной клик
if (butt1.hasClicks()) // проверка на наличие нажатий
Serial.println(butt1.getClicks()); // получить (и вывести) число нажатий
if (butt1.isPress()) Serial.println("Press"); // нажатие на кнопку (+ дебаунс)
if (butt1.isRelease()) Serial.println("Release"); // отпускание кнопки (+ дебаунс)
if (butt1.isHolded()) Serial.println("Holded"); // проверка на удержание
if (butt1.isHold()) Serial.println("Holding"); // проверка на удержание
//if (butt1.state()) Serial.println("Hold"); // возвращает состояние кнопки
if (butt1.isStep()) { // если кнопка была удержана (это для инкремента)
value++; // увеличивать/уменьшать переменную value с шагом и интервалом
Serial.println(value); // для примера выведем в порт
}
}

View File

@@ -0,0 +1,48 @@
/*
Пример использования библиотеки GyverButton, все возможности в одном скетче.
- Опрос кнопки с программным антидребезгом контактов
- Отработка нажатия, удерживания отпускания кнопки
- Отработка одиночного, двойного и тройного нажатия (вынесено отдельно)
- Отработка любого количества нажатий кнопки (функция возвращает число нажатий)
- Отработка нажатия и удержания кнопки
- Настраиваемый таймаут повторного нажатия/удержания
- Функция изменения значения переменной с заданным шагом и заданным интервалом по времени
*/
#define PIN 3 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(PIN);
int value = 0;
void setup() {
Serial.begin(9600);
attachInterrupt(1, isr, CHANGE);
butt1.setDebounce(80); // настройка антидребезга (по умолчанию 80 мс)
butt1.setTimeout(300); // настройка таймаута на удержание (по умолчанию 500 мс)
}
void isr() {
butt1.tick(); // обязательная функция отработки. Должна постоянно опрашиваться
}
void loop() {
if (butt1.isClick()) Serial.println("Click"); // проверка на один клик
if (butt1.isSingle()) Serial.println("Single"); // проверка на один клик
if (butt1.isDouble()) Serial.println("Double"); // проверка на двойной клик
if (butt1.isTriple()) Serial.println("Triple"); // проверка на тройной клик
if (butt1.hasClicks()) // проверка на наличие нажатий
Serial.println(butt1.getClicks()); // получить (и вывести) число нажатий
if (butt1.isPress()) Serial.println("Press"); // нажатие на кнопку (+ дебаунс)
if (butt1.isRelease()) Serial.println("Release"); // отпускание кнопки (+ дебаунс)
if (butt1.isHolded()) Serial.println("Holded"); // проверка на удержание
//if (butt1.isHold()) Serial.println("Hold"); // возвращает состояние кнопки
if (butt1.isStep()) { // если кнопка была удержана (это для инкремента)
value++; // увеличивать/уменьшать переменную value с шагом и интервалом
Serial.println(value); // для примера выведем в порт
}
}

View File

@@ -0,0 +1,51 @@
/*
Пример использования библиотеки GyverButton, все возможности в одном скетче.
- Опрос кнопки с программным антидребезгом контактов
- Отработка нажатия, удерживания отпускания кнопки
- Отработка одиночного, двойного и тройного нажатия (вынесено отдельно)
- Отработка любого количества нажатий кнопки (функция возвращает число нажатий)
- Отработка нажатия и удержания кнопки
- Настраиваемый таймаут повторного нажатия/удержания
- Функция изменения значения переменной с заданным шагом и заданным интервалом по времени
Данный скетч показывает, как быть в сложном "не сквозном" коде с кучей delay и замкнутых циклов
Здесь кнопка опрашивается каждые 10 миллисекунд независимо от того, что происходит у вас в коде
Используется библиотека TimerOne https://github.com/PaulStoffregen/TimerOne
*/
#define PIN 3 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#include "GyverButton.h"
#include "TimerOne.h"
GButton butt1(PIN);
int value = 0;
void setup() {
Serial.begin(9600);
Timer1.initialize(10000); // установка таймера на каждые 10000 микросекунд (= 10 мс)
Timer1.attachInterrupt(timerIsr); // запуск таймера
}
void timerIsr() { // прерывание таймера
butt1.tick(); // отработка теперь находится здесь
}
void loop() {
if (butt1.isClick()) Serial.println("Click"); // проверка на один клик
if (butt1.isSingle()) Serial.println("Single"); // проверка на один клик
if (butt1.isDouble()) Serial.println("Double"); // проверка на двойной клик
if (butt1.isTriple()) Serial.println("Triple"); // проверка на тройной клик
if (butt1.hasClicks()) // проверка на наличие нажатий
Serial.println(butt1.getClicks()); // получить (и вывести) число нажатий
if (butt1.isPress()) Serial.println("Press"); // нажатие на кнопку (+ дебаунс)
if (butt1.isRelease()) Serial.println("Release"); // отпускание кнопки (+ дебаунс)
if (butt1.isHolded()) Serial.println("Holded"); // проверка на удержание
//if (butt1.isHold()) Serial.println("Hold"); // возвращает состояние кнопки
if (butt1.isStep()) { // если кнопка была удержана (это для инкремента)
value++; // увеличивать/уменьшать переменную value с шагом и интервалом
Serial.println(value); // для примера выведем в порт
}
}

View File

@@ -0,0 +1,20 @@
/*
Пример использования библиотеки 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"); // проверка на тройной клик
}

View File

@@ -0,0 +1,34 @@
/*
Пример использования библиотеки GyverButton, 5 кнопок
*/
#define BTN1 3 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN2 4 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN3 5 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN4 6 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN5 7 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(BTN1);
GButton butt2(BTN2);
GButton butt3(BTN3);
GButton butt4(BTN4);
GButton butt5(BTN5);
void setup() {
Serial.begin(9600);
}
void loop() {
butt1.tick();
butt2.tick();
butt3.tick();
butt4.tick();
butt5.tick();
if (butt1.isClick()) Serial.println("Button 1");
if (butt2.isClick()) Serial.println("Button 2");
if (butt3.isClick()) Serial.println("Button 3");
if (butt4.isClick()) Serial.println("Button 4");
if (butt5.isClick()) Serial.println("Button 5");
}

View File

@@ -0,0 +1,34 @@
/*
Пример использования библиотеки GyverButton, 5 кнопок
Режим опроса - автоматический
*/
#define BTN1 3 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN2 4 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN3 5 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN4 6 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN5 7 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(BTN1);
GButton butt2(BTN2);
GButton butt3(BTN3);
GButton butt4(BTN4);
GButton butt5(BTN5);
void setup() {
Serial.begin(9600);
butt1.setTickMode(AUTO);
butt2.setTickMode(AUTO);
butt3.setTickMode(AUTO);
butt4.setTickMode(AUTO);
butt5.setTickMode(AUTO);
}
void loop() {
if (butt1.isClick()) Serial.println("Button 1");
if (butt2.isClick()) Serial.println("Button 2");
if (butt3.isClick()) Serial.println("Button 3");
if (butt4.isClick()) Serial.println("Button 4");
if (butt5.isClick()) Serial.println("Button 5");
}

View File

@@ -0,0 +1,32 @@
#include "GyverButton.h"
// пин подключения не важен, лучше какой-нибудь ненужный
GButton myButt1(3, LOW_PULL, NORM_OPEN);
GButton myButt2(3, LOW_PULL, NORM_OPEN);
GButton myButt3(3, LOW_PULL, NORM_OPEN);
void setup() {
Serial.begin(9600);
}
void loop() {
int analog = analogRead(7);
//Serial.println(analog);
myButt1.tick(analog < 860 && analog > 820);
myButt2.tick(analog < 740 && analog > 700);
myButt3.tick(analog < 650 && analog > 600);
if (myButt1.isHolded()) {
Serial.println("hold 1");
}
if (myButt2.isHolded()) {
Serial.println("hold 2");
}
if (myButt3.isHolded()) {
Serial.println("hold 3");
}
delay(10);
}

View File

@@ -0,0 +1,41 @@
/*
Пример использования библиотеки 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); // для примера выведем в порт
}
}

View File

@@ -0,0 +1,19 @@
/*
Пример использования библиотеки 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()); // получить (и вывести) число нажатий
}

View File

@@ -0,0 +1,48 @@
#######################################
# Syntax Coloring Map For GyverButton
#######################################
#######################################
# Datatypes (KEYWORD1)
#######################################
GButton KEYWORD1
GyverButton KEYWORD1
#######################################
# Methods and Functions (KEYWORD2)
#######################################
setDebounce KEYWORD2
setTimeout KEYWORD2
setStepTimeout KEYWORD2
setClickTimeout KEYWORD2
setType KEYWORD2
setDirection KEYWORD2
setTickMode KEYWORD2
tick KEYWORD2
isPress KEYWORD2
isRelease KEYWORD2
isClick KEYWORD2
isHolded KEYWORD2
isHold KEYWORD2
state KEYWORD2
hasClicks KEYWORD2
getClicks KEYWORD2
isSingle KEYWORD2
isDouble KEYWORD2
isTriple KEYWORD2
isStep KEYWORD2
#######################################
# Constants (LITERAL1)
#######################################
HIGH_PULL LITERAL1
LOW_PULL LITERAL1
NORM_OPEN LITERAL1
NORM_CLOSE LITERAL1
MANUAL LITERAL1
AUTO LITERAL1

Binary file not shown.