Библиотека GyverEncoder

Библиотека GyverEncoder 3.6

enc.jpg

Данная библиотека предназначена для работы с энкодерами, в частности модулями KY-040. Китайцы без предупреждения паяют на данные модули разные типы энкодеров: полупериодные и полнопериодные. Такую информацию вы скорее всего не найдёте в интернете, но существует два типа энкодеров, и в данной библиотеке можно этот тип просто выбрать. Симптомы неправильно выбранного типа: один тик энкодера даёт два "поворота", грубо говоря переменная увеличивается на 2 вместо 1. Либо наоборот, для увеличения требуется сделать два тика. Основные функции и возможности библиотеки:
  • Отработка поворота с антидребезгом
  • Отработка нажатия кнопки с антидребезгом
  • Отработка нажатия и удержания кнопки
  • Отработка "нажатого поворота"
  • Работа с двумя типами энкодеров
C++:
Encoder(uint8_t, uint8_t, uint8_t);
// CLK, DT, SW

Encoder(uint8_t, uint8_t, uint8_t, boolean);
// CLK, DT, SW, тип (TYPE1 / TYPE2): TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип
        
void tick();                             // опрос энкодера, нужно вызывать постоянно или в прерывании
void setType(boolean type);              // TYPE1 / TYPE2 - тип энкодера TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип
void setTickMode(boolean tickMode);      // MANUAL / AUTO - ручной или автоматический опрос энкодера функцией tick(). (по умолчанию ручной)
void setDirection(boolean direction);    // NORM / REVERSE - направление вращения энкодера
    
boolean isTurn();                        // возвращает true при любом повороте, сама сбрасывается в false
boolean isRight();                       // возвращает true при повороте направо, сама сбрасывается в false
boolean isLeft();                        // возвращает true при повороте налево, сама сбрасывается в false
boolean isRightH();                      // возвращает true при удержании кнопки и повороте направо, сама сбрасывается в false
boolean isLeftH();                       // возвращает true при удержании кнопки и повороте налево, сама сбрасывается в false
    
boolean isPress();                       // возвращает true при нажатии кнопки, сама сбрасывается в false
boolean isRelease();                     // возвращает true при отпускании кнопки, сама сбрасывается в false
boolean isHolded();                      // возвращает true при удержании кнопки, сама сбрасывается в false
boolean isHold();                        // возвращает true при удержании кнопки, НЕ СБРАСЫВАЕТСЯ
Общий пример использования
C++:
#define CLK 7
#define DT 8
#define SW 9

#include "GyverEncoder.h"
Encoder enc1(CLK, DT, SW);

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

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");     // отпускание кнопки (+ дебаунс)
  if (enc1.isHolded()) Serial.println("Holded");       // если была удержана и энк не поворачивался
  //if (enc1.isHold()) Serial.println("Hold");         // возвращает состояние кнопки
}
Меняем значения двух разных переменных одним энкодером
C++:
#define CLK 7
#define DT 8
#define SW 9

#include "GyverEncoder.h"
Encoder enc1(CLK, DT, SW);

byte val_1, val_2;

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

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

  // просто поворот. Меняем val_1
  if (enc1.isRight()) val_1 ++;        // увеличили первую переменную
  if (enc1.isLeft()) val_1 --;        // уменьшили

  // нажали ручку, удерживаем и крутим
  if (enc1.isRightH()) val_2 ++;    // увеличили вторую переменную
  if (enc1.isLeftH()) val_2 --;        // уменьшили
}
Автор
AlexGyver
Скачивания
1,364
Просмотры
1,642
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

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

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

  1. Версия 3.0!

    Полностью изменена логика отработки поворота: более быстро и оптимально Добавлена отработка...
  2. Пофикшены баги

    Пофикшены баги и уменьшен размер библиотеки
  3. Исправлены мелкие ошибки

    Исправлены мелкие ошибки