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.