Энкодеры требуют мгновенной реакции. Используем PCINT для порта C (пины A0-A5):
ISR(PCINT1_vect) { // Срабатывает при изменении на порту C
static uint8_t encState[6] = {0};
uint8_t currentState = PINC;
uint8_t changed = currentState ^ lastPINC;
// Проходим по всем 6 пинам
for (int i = 0; i < 6; i++) {
if (changed & (1 << i)) {
// Обработка энкодера i
encState[i] = (encState[i] << 1) | ((currentState >> i) & 1);
if (encState[i] == 0b0011) {
// Вращение по часовой
encoderValue[i]++;
} else if (encState[i] == 0b0110) {
// Вращение против часовой
encoderValue[i]--;
}
}
}
lastPINC = currentState;
}