Skip to content

Использование минимального класса для энкодера #8

@brightproject

Description

@brightproject

Изучаю код для контроллера, обратил внимание, что используется библиотека "encMinim.h"
Судя из названия, это облегченная библиотека, и в ней команды от энкодера преобразуются в цифры от 0 до 6.
// 0 - ничего, 1 - лево, 2 - право, 3 - правоНажат, 4 - левоНажат, 5 - клик, 6 - удержан
Где в данной библиотеке менять тип энкодера(одно-,дву-тактный)?
Библиотека сама "определяет" какой тип энкодера 1 или 2?
Для чего ввели вывод команд от энкодера в цифрах?
Это связано с оптимизацией?
Дефайн ENCODER_TYPE не нашел пока в коде где задан.
encMinim enc(CLK, DT, SW, ENC_REVERSE, ENCODER_TYPE);
И если честно, то в разнообразных библиотеках для энкодеров от гайвера уже запутался...
"GyverEncoder.h", "EncButton.h", "EncButton2.h" - какая новая, какая устаревшая, в чем отличия и почему нельзя свести все в одну, универсальную, библиотеку.
Я вообще пробовал опрашивать энкодер простейшим кодом, и особой разницы не заметил ни в скорости ни в функционале.

const int CLK = 12; //D6
const int DT = 13; //D7
const int NOKIA_BL = 2;//D4 - пин подсветки(он же SW)
int counter = 0;                      // Создаем переменную counter
int currentStateCLK;                  // Создаем переменную currentStateCLK
int lastStateCLK;                     // Создаем переменную lastStateCLK
String currentDir = "";               // Создаем
unsigned long lastButtonPress = 0;    // Создаем переменную lastBut

void setup()
{
  pinMode(NOKIA_BL, OUTPUT); //GPIO02
  pinMode(CLK, INPUT);                // Указываем вывод CLK как вход
  pinMode(DT, INPUT);                 // Указываем вывод DT как вход
  Serial.begin(9600);                 // Создаем последовательную связь
  lastStateCLK = digitalRead(CLK);    // Считываем значение с CLK
}
void loop()
{
  currentStateCLK = digitalRead(CLK); // Считываем значение с CLK

  // Проверяем изменилось ли состояние CLK
  if (currentStateCLK != lastStateCLK  && currentStateCLK == 1) {
    if (digitalRead(DT) != currentStateCLK) {
      counter --;
      currentDir = "Влево";
    } else {
      counter ++;
      currentDir = "Вправо";

    }
    Serial.print("Direction: ");
    Serial.print(currentDir);
    Serial.print(" | Counter: ");
    Serial.println(counter);
  }

  lastStateCLK = currentStateCLK;         // Запоминаем последнее состояние CLK
  int btnState = digitalRead(SW);         // Считываем состояние вывода SW


  if (btnState == LOW) {                  // Если состояние LOW, кнопка нажата
    if (millis() - lastButtonPress > 50) { // Если состояние LOW в течении 50 мкс, кнопка нажата
      Serial.println("Button pressed!");  // Отправка сообщения
      digitalWrite(NOKIA_BL, LOW);
    }
    lastButtonPress = millis();
  } else {
    digitalWrite(NOKIA_BL, HIGH);
  }
  delay(1);                               // Пауза
}

Понятно, что библиотеки энкодеров позволяют намного проще делать интеграцию управления в проекты, но они также вносят проблемы при отладке.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions