Minimal (fast) interrupt based encoder counter for Arduino: `// lookup table for encoder transitions int encoder_states[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0}; void IRAM_ATTR countE1(){ static int oldE = 0; int E = (digitalRead(E1P1) << 1) + digitalRead(E1P2); E1cnt = E1cnt + encoder_states[oldE + E]; oldE = (E & 0x3) << 2; }`