whins
10/7/2018 - 12:20 PM

encoder.ino

int pinA = 2;  // номер виводу, підключеного до CLK енкодера
int pinB = 3;  // номер виводу контролера, підключеного до DT енкодера
int encoderPosCount = 0; 
int pinALast;  
void setup() {
  Serial.begin (115200);
  pinMode (pinA,INPUT);
  pinMode (pinB,INPUT);
  pinALast = digitalRead(pinA);
  attachInterrupt(0, doEncoderA, CHANGE); //переривання за зміною на піні №2(для Arduino UNO)
}
void loop() {
  //ваша програма, що використовує значення положення енкодера encoderPosCount
}
void doEncoderA() {
  // слідкуємо за переходом low-to-high на контакті A
  if (pinALast != digitalRead(pinA)){
  if (digitalRead(pinA) == HIGH) {
    // перевіряємо контакт B для визначення напрямку обертання
    if (digitalRead(pinB) == LOW) {
      encoderPosCount ++;         // CW
    }
    else {
      encoderPosCount--;         // CCW
    }
  }
  else   // слідкуємо за переходом high-to-low на виводі A
  {
    // перевіряємо вивід B для визначення напрямку обертання
    if (digitalRead(pinB) == HIGH) {
      encoderPosCount ++;          // CW
    }
    else {
      encoderPosCount--;        // CCW
    }
  }
 
  Serial.println (encoderPosCount);
  }
 pinALast = digitalRead(pinA);
}