-
Notifications
You must be signed in to change notification settings - Fork 48
Description
Изучаю код для контроллера, обратил внимание, что используется библиотека "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); // Пауза
}
Понятно, что библиотеки энкодеров позволяют намного проще делать интеграцию управления в проекты, но они также вносят проблемы при отладке.