Хак №4: Читаем 6 энкодеров на 6 пинах

Энкодеры требуют мгновенной реакции. Используем 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;

}

Вам также может понравиться

About the Author: ардуинчиков

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *