Энкодер
Схема подключения

Код
#define CLK 2 // Указываем к какому выводу CLK энкодер подключен к Arduino
#define DT 3 // Указываем к какому выводу DT энкодер подключен к Arduino
#define SW 4 // Указываем к какому выводу SW энкодер подключен к Arduino
int counter = 0; // Создаем переменную counter
int currentStateCLK; // Создаем переменную currentStateCLK
int lastStateCLK; // Создаем переменную lastStateCLK
String currentDir =""; // Создаем
unsigned long lastButtonPress = 0; // Создаем переменную lastBut
void setup()
{
pinMode(CLK, INPUT); // Указываем вывод CLK как вход
pinMode(DT, INPUT); // Указываем вывод DT как вход
pinMode(SW, INPUT_PULLUP); // Указываем вывод SW как вход и включаем подтягивающий резистор
Serial.begin(9600); // Создаем последовательную связь
lastStateCLK = digitalRead(CLK);
pinMode(13, OUTPUT); // Считываем значение с CLK
}
void loop()
{
currentStateCLK = digitalRead(CLK); // Считываем значение с CLK
// Проверяем изменилось ли состояние CLK
if (currentStateCLK != lastStateCLK && currentStateCLK == 1){
if (digitalRead(DT) != currentStateCLK) {
counter --;
currentDir ="CCW";
} else {
counter ++;
currentDir ="CW";
}
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!"); // ОТправка сообщения
switch (digitalRead(13)) { // переводим светодиод в противоположное состояние
case HIGH:
digitalWrite(13, LOW);
break;
case LOW:
digitalWrite(13, HIGH);
break;
}
}
lastButtonPress = millis();
}
delay(1); // Пауза
}