You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Изучаю код для контроллера, обратил внимание, что используется библиотека "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); // Пауза
}
Понятно, что библиотеки энкодеров позволяют намного проще делать интеграцию управления в проекты, но они также вносят проблемы при отладке.
The text was updated successfully, but these errors were encountered:
Изучаю код для контроллера, обратил внимание, что используется библиотека "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" - какая новая, какая устаревшая, в чем отличия и почему нельзя свести все в одну, универсальную, библиотеку.
Я вообще пробовал опрашивать энкодер простейшим кодом, и особой разницы не заметил ни в скорости ни в функционале.
Понятно, что библиотеки энкодеров позволяют намного проще делать интеграцию управления в проекты, но они также вносят проблемы при отладке.
The text was updated successfully, but these errors were encountered: