Interrupções

O Arduino permite associar funções a interrupções de hardware, que são executadas automaticamente quando ocorre um evento (ex.: transição num pino digital, overflow de um timer).

Exemplo: Contagem de Pulsos (Encoder Simples)

#define ENCODER_PIN 2
volatile long counter = 0;

void ISR_encoder() {
  counter++;
}

void setup() {
  attachInterrupt(digitalPinToInterrupt(ENCODER_PIN), ISR_encoder, RISING);
  Serial.begin(115200);
}

void loop() {
  Serial.println(counter);
  delay(500);
}

Para encoders em quadratura, usam-se duas interrupções (canais A e B), permitindo detetar também o sentido de rotação.