Hi !
I need this to work with an optical incremental encoder (3600 pulses per revolution) . When digitalRead is slow, skips occur when the encoder rotates rapidly. And I need to solve this problem
I do it through an interruption ( attachInterrupt)
void encIsr()
{
curState = digitalRead(ENC_A) | digitalRead(ENC_B) << 1; // digitalRead
if (resetFlag && curState == 0b11) {
if (prevState == 0b10) {
encCounter++;
if (encCounter >= 250) {
encCounter = 0;
FullCounter++;
}
}
if (prevState == 0b01) {
encCounter--;
if (encCounter <= -250) {
encCounter = 0;
FullCounter--;
}
}
resetFlag = 0;
flag = true;
}
if (curState == 0b00) resetFlag = 1;
prevState = curState;
}