diff --git a/GyverButton/GyverButton.cpp b/GyverButton/GyverButton.cpp index 0e75f4c..8311b2c 100644 --- a/GyverButton/GyverButton.cpp +++ b/GyverButton/GyverButton.cpp @@ -1,5 +1,4 @@ #include "GyverButton.h" -#include // ==================== CONSTRUCTOR ==================== GButton::GButton(int8_t pin, bool type, bool dir) { @@ -87,8 +86,8 @@ boolean GButton::state() { boolean GButton::isSingle() { if (flags.tickMode) GButton::tick(); if (flags.counter_flag && last_counter == 1) { -// last_counter = 0; -// flags.counter_flag = false; + // last_counter = 0; + // flags.counter_flag = false; flags.counter_reset = true; return true; } else return false; @@ -96,8 +95,8 @@ boolean GButton::isSingle() { boolean GButton::isDouble() { if (flags.tickMode) GButton::tick(); if (flags.counter_flag && last_counter == 2) { -// flags.counter_flag = false; -// last_counter = 0; + // flags.counter_flag = false; + // last_counter = 0; flags.counter_reset = true; return true; } else return false; @@ -105,8 +104,8 @@ boolean GButton::isDouble() { boolean GButton::isTriple() { if (flags.tickMode) GButton::tick(); if (flags.counter_flag && last_counter == 3) { -// flags.counter_flag = false; -// last_counter = 0; + // flags.counter_flag = false; + // last_counter = 0; flags.counter_reset = true; return true; } else return false; @@ -114,20 +113,20 @@ boolean GButton::isTriple() { boolean GButton::hasClicks() { if (flags.tickMode) GButton::tick(); if (flags.counter_flag) { -// flags.counter_flag = false; + // flags.counter_flag = false; flags.counter_reset = true; return true; } else return false; } uint8_t GButton::getClicks() { - byte thisCount = last_counter; -// last_counter = 0; - flags.counter_reset = true; - return thisCount; + // byte thisCount = last_counter; // Исключено 14.01.2021 + // last_counter = 0; + flags.counter_reset = true; + return last_counter; // return thisCount; (замена) 14.01.2021 } uint8_t GButton::getHoldClicks() { if (flags.tickMode) GButton::tick(); - return flags.hold_flag ? last_hold_counter : 0; + return last_hold_counter; //return flags.hold_flag ? last_hold_counter : 0; (Замена) 14.01.2021 } boolean GButton::isStep(byte clicks) { if (flags.tickMode) GButton::tick(); @@ -217,7 +216,7 @@ void GButton::tick() { } // сброс накликивания //Добавлено - if(flags.counter_reset) { + if (flags.counter_reset) { last_counter = 0; flags.counter_flag = false; flags.counter_reset = false; diff --git a/GyverButton/GyverButton.h b/GyverButton/GyverButton.h index f74c587..9b2dad9 100644 --- a/GyverButton/GyverButton.h +++ b/GyverButton/GyverButton.h @@ -1,5 +1,4 @@ -#ifndef GyverButton_h -#define GyverButton_h +#pragma once #include /* @@ -27,6 +26,8 @@ - Любой таймаут удержания - Single, Double и Triple теперь не мешают hasClicks и getClicks и работают совместно - isStep() тоже теперь ничего не мешает и он работает более корректно + Версия 3.8: исправления от Dryundel: + */ #if defined(__AVR__) @@ -64,7 +65,7 @@ typedef struct { #define AUTO 1 // Варианты инициализации: -// GButton btn; // без привязки к пину (виртуальная кнопка) и без указания типа (по умолч. HIGH_PULL и NORM_OPEN) +// GButton btn; // без привязки к пину (виртуальная кнопка) и без указания типа (по умолч. LOW_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) @@ -90,7 +91,7 @@ class GButton { // AUTO - tick() входит во все остальные функции и опрашивается сама void tick(); // опрос кнопки - void tick(boolean state); // опрос внешнего значения (0 нажато, 1 не нажато) (для матричных, резистивных клавиатур и джойстиков) + void tick(boolean state); // опрос внешнего значения (1 нажато, 0 не нажато) (для матричных, резистивных клавиатур и джойстиков) boolean isPress(); // возвращает true при нажатии на кнопку. Сбрасывается после вызова boolean isRelease(); // возвращает true при отпускании кнопки. Сбрасывается после вызова @@ -126,5 +127,4 @@ class GButton { volatile uint8_t *_pin_reg; volatile uint8_t _bit_mask; #endif -}; -#endif \ No newline at end of file +}; \ No newline at end of file diff --git a/GyverButton/library.properties b/GyverButton/library.properties index 769a448..4cfae5e 100644 --- a/GyverButton/library.properties +++ b/GyverButton/library.properties @@ -1,5 +1,5 @@ name=GyverButton -version=3.7 +version=3.8 author=AlexGyver maintainer=AlexGyver sentence=Advanced library for button. diff --git a/GyverEncoder/GyverEncoder.cpp b/GyverEncoder/GyverEncoder.cpp index d3f2e6a..471297b 100644 --- a/GyverEncoder/GyverEncoder.cpp +++ b/GyverEncoder/GyverEncoder.cpp @@ -336,13 +336,13 @@ void Encoder::tick() { if (encState != 0) { flags.isTurn_f = true; - if (thisMls - fast_timer < _fast_timeout) { + if (!SW_state && thisMls - fast_timer < _fast_timeout) { if (encState == 1) flags.isFastL_f = true; else if (encState == 2) flags.isFastR_f = true; fast_timer = thisMls; } else fast_timer = thisMls; #ifdef ENC_WITH_BUTTON - if (flags.use_button) if (SW_state) encState += 2; + if (flags.use_button && SW_state) encState += 2; #endif } prevState = curState; diff --git a/GyverEncoder/GyverEncoder.h b/GyverEncoder/GyverEncoder.h index 5824228..d3e67ef 100644 --- a/GyverEncoder/GyverEncoder.h +++ b/GyverEncoder/GyverEncoder.h @@ -37,6 +37,7 @@ - 4.6: BINARY_ALGORITHM пофикшен для TYPE1, добавлена isReleaseHold - 4.7: Исправлен случайный нажатый поворот в BINARY_ALGORITHM - 4.8: увеличена производительность для AVR Arduino + - 4.9: быстрый поворот отключен если кнопка удерживается */ // ========= КОНСТАНТЫ ========== #define ENC_NO_BUTTON -1 // константа для работы без пина diff --git a/GyverEncoder/library.properties b/GyverEncoder/library.properties index aa0092b..cb5e6b0 100644 --- a/GyverEncoder/library.properties +++ b/GyverEncoder/library.properties @@ -1,5 +1,5 @@ name=GyverEncoder -version=4.8 +version=4.9 author=AlexGyver maintainer=AlexGyver sentence=Advanced library for encoder. diff --git a/README.md b/README.md index 5c8a618..8e97b83 100644 --- a/README.md +++ b/README.md @@ -592,7 +592,7 @@ float getTemp(void); // получить температуру ![Logo](/logos/btnLogo.png) -### GyverButton v3.7 [СКАЧАТЬ](https://github.com/AlexGyver/GyverLibs/releases/download/GyverButton/GyverButton.zip), [ДОКУМЕНТАЦИЯ](https://alexgyver.ru/gyverbutton/) +### GyverButton v3.8 [СКАЧАТЬ](https://github.com/AlexGyver/GyverLibs/releases/download/GyverButton/GyverButton.zip), [ДОКУМЕНТАЦИЯ](https://alexgyver.ru/gyverbutton/) Библиотека для многофункциональной отработки нажатия кнопок с Arduino. Возможности: - Работа с нормально замкнутыми и нормально разомкнутыми кнопками - Работа с подключением PULL_UP и PULL_DOWN @@ -661,7 +661,7 @@ void resetStates(); // сбрасывает все is-флаги и счёт ![Logo](/logos/encLogo.png) -### GyverEncoder v4.8 [СКАЧАТЬ](https://github.com/AlexGyver/GyverLibs/releases/download/GyverEncoder/GyverEncoder.zip), [ДОКУМЕНТАЦИЯ](https://alexgyver.ru/encoder/) +### GyverEncoder v4.9 [СКАЧАТЬ](https://github.com/AlexGyver/GyverLibs/releases/download/GyverEncoder/GyverEncoder.zip), [ДОКУМЕНТАЦИЯ](https://alexgyver.ru/encoder/) Библиотека для отработки энкодера с Arduino. Возможности: - Отработка поворота с антидребезгом - Отработка нажатия кнопки с антидребезгом