Энкодер

Схема подключения 
 
 Код 
 #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); // Пауза
}