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);
}