Если вы видите что-то необычное, просто сообщите мне. Skip to main content

Энкодер

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

Код

#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);                               // Пауза
}