Skip to content
This repository was archived by the owner on Sep 8, 2023. It is now read-only.

GyverLibs/GyverEncoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

latest Foo Foo Foo

Foo

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

ВНИМАНИЕ, БИБЛИОТЕКА УСТАРЕЛА! ИСПОЛЬЗУЙ БИБЛИОТЕКУ EncButton, ОНА ЛЕГЧЕ И ИМЕЕТ БОЛЬШЕ ВОЗМОЖНОСТЕЙ

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

GyverEncoder

Библиотека для расширенной работы с энкодером

  • Отработка поворота энкодера
  • Отработка "нажатого поворота"
  • Отработка "быстрого поворота"
  • Несколько алгоритмов опроса энкодера
  • Выбор подтяжки подключения энкодера
  • Работа с двумя типами экнодеров
  • Работа с внешним энкодером (через расширитель пинов и т.п.)
  • Отработка нажатия/удержания кнопки с антидребезгом

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Документация

К библиотеке есть расширенная документация

Содержание

Установка

  • Библиотеку можно найти по названию GyverEncoder и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Обновление

  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Инициализация

Encoder enc;                                        // не привязан к пину
Encoder enc(пин CLK, пин DT);                       // энкодер без кнопки (ускоренный опрос)
Encoder enc(пин CLK, пин DT, пин SW);               // энкодер с кнопкой
Encoder enc(пин CLK, пин DT, пин SW, тип);          // энкодер с кнопкой и указанием типа
Encoder enc(пин CLK, пин DT, ENC_NO_BUTTON, тип);   // энкодер без кнопкой и с указанием типа

Использование

void tick();                             // опрос энкодера, нужно вызывать постоянно или в прерывании
void setType(boolean type);              // TYPE1 / TYPE2 - тип энкодера TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип
void setTickMode(boolean tickMode);      // MANUAL / AUTO - ручной или автоматический опрос энкодера функцией tick(). (по умолчанию ручной)
void setDirection(boolean direction);    // NORM / REVERSE - направление вращения энкодера
void setFastTimeout(int timeout);        // установка таймаута быстрого поворота
void setPinMode(bool mode);              // тип подключения энкодера, подтяжка HIGH_PULL (внутренняя) или LOW_PULL (внешняя на GND)
void setBtnPinMode(bool mode);           // тип подключения кнопки, подтяжка HIGH_PULL (внутренняя) или LOW_PULL (внешняя на GND)
 
boolean isTurn();                        // возвращает true при любом повороте, сама сбрасывается в false
boolean isRight();                       // возвращает true при повороте направо, сама сбрасывается в false
boolean isLeft();                        // возвращает true при повороте налево, сама сбрасывается в false
boolean isRightH();                      // возвращает true при удержании кнопки и повороте направо, сама сбрасывается в false
boolean isLeftH();                       // возвращает true при удержании кнопки и повороте налево, сама сбрасывается в false
boolean isFastR();                       // возвращает true при быстром повороте
boolean isFastL();                       // возвращает true при быстром повороте
 
boolean isPress();                       // возвращает true при нажатии кнопки, сама сбрасывается в false
boolean isRelease();                     // возвращает true при отпускании кнопки, сама сбрасывается в false
boolean isClick();                       // возвращает true при нажатии и отпускании кнопки, сама сбрасывается в false
boolean isHolded();                      // возвращает true при удержании кнопки, сама сбрасывается в false
boolean isHold();                        // возвращает true при удержании кнопки, НЕ СБРАСЫВАЕТСЯ
boolean isSingle();                      // возвращает true при одиночном клике (после таймаута), сама сбрасывается в false
boolean isDouble();                      // возвращает true при двойном клике, сама сбрасывается в false
void resetStates();                      // сбрасывает все is-флаги

Пример

Остальные примеры смотри в examples!

#define CLK 2
#define DT 3
#define SW 4

#include "GyverEncoder.h"
Encoder enc1(CLK, DT, SW);  // для работы c кнопкой

void setup() {
  Serial.begin(9600);
  enc1.setType(TYPE2);
}

void loop() {
	// обязательная функция отработки. Должна постоянно опрашиваться
  enc1.tick();
  
  if (enc1.isTurn()) {     // если был совершён поворот (индикатор поворота в любую сторону)
    // ваш код
  }
  
  if (enc1.isRight()) Serial.println("Right");         // если был поворот
  if (enc1.isLeft()) Serial.println("Left");
  
  if (enc1.isRightH()) Serial.println("Right holded"); // если было удержание + поворот
  if (enc1.isLeftH()) Serial.println("Left holded");
  
  //if (enc1.isPress()) Serial.println("Press");         // нажатие на кнопку (+ дебаунс)
  //if (enc1.isRelease()) Serial.println("Release");     // то же самое, что isClick
  
  if (enc1.isClick()) Serial.println("Click");         // одиночный клик
  if (enc1.isSingle()) Serial.println("Single");       // одиночный клик (с таймаутом для двойного)
  if (enc1.isDouble()) Serial.println("Double");       // двойной клик
  
  
  if (enc1.isHolded()) Serial.println("Holded");       // если была удержана и энк не поворачивался
  //if (enc1.isHold()) Serial.println("Hold");         // возвращает состояние кнопки
}

Версии

  • v3.6 от 16.09.2019 - Возвращены дефайны настроек
  • v4.0 от 13.11.2019 - Оптимизирован код - Исправлены баги - Добавлены другие алгоритмы опроса - Добавлена возможность полностью убрать кнопку (экономия памяти) - Добавлена возможность подключения внешнего энкодера - Добавлена настройка подтяжки пинов
  • v4.1: Исправлено изменение подтяжек
  • v4.2 - Добавлена поддержка TYPE1 для алгоритма PRECISE_ALGORITHM - Добавлена отработка двойного клика: isSingle / isDouble
  • v4.3: Исправлено ложное isSingle
  • v4.4: Добавлен метод resetStates, сбрасывает все is-флаги и счётчики
  • v4.5: Улучшен алгоритм BINARY_ALGORITHM (спасибо Ярославу Курусу)
  • v4.6: BINARY_ALGORITHM пофикшен для TYPE1, добавлена isReleaseHold
  • v4.7: Исправлен случайный нажатый поворот в BINARY_ALGORITHM
  • v4.8: увеличена производительность для AVR Arduino
  • v4.9: быстрый поворот отключен если кнопка удерживается
  • v4.10: починил setDirection()

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Библиотека для расширенной работы с энкодером и Arduino

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages