Все знают про стандартные прерывания attachInterrupt() на пинах 2 и 3 (INT0 и INT1). Но что, если нужно обрабатывать 5 энкодеров, 10 кнопок или считывать 6 датчиков вибрации одновременно?
На помощь приходят Pin Change Interrupts (PCINT) — они работают на всех пинах, кроме 2 и 3.
Как это работает внутри:
У каждого порта есть свой вектор прерывания:
- PCINT0 — для пинов PD0–PD7 (пины 0–7)
- PCINT1 — для пинов PC0–PC6 (пины A0–A5 и Reset)
- PCINT2 — для пинов PB0–PB7 (пины 8–13)
Когда любой пин в порте меняет состояние, срабатывает общее прерывание для всего порта. Ваша задача — внутри обработчика выяснить, какой именно пин изменился.