Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
brightproject opened this issue Oct 8, 2022 · 0 comments

Comments

@brightproject
Copy link

brightproject commented Oct 8, 2022

Изучаю код для контроллера, обратил внимание, что используется библиотека "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);                               // Пауза
}

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant