detachInterrupt()
detachInterrupt(digitalPinToInterrupt(pino))
Depois de ligar uma interrupção num pino, chega um momento em que você quer que ela pare de disparar — por exemplo, quando já leu o que precisava ou quando quer evitar disparos repetidos. O detachInterrupt() faz exatamente isso: desativa a interrupção daquele pino e o Arduino volta a ignorar as mudanças nele.
Sintaxe
detachInterrupt(digitalPinToInterrupt(pino));
Parâmetros
- pino: o pino cuja interrupção você quer desligar. Use
digitalPinToInterrupt(pino)do mesmo jeito que fez noattachInterrupt().
Retorno
Nada (void).
Exemplo
const byte pinoBotao = 2;
volatile bool disparou = false;
void aoDisparar() {
disparou = true;
}
void setup() {
Serial.begin(9600);
pinMode(pinoBotao, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(pinoBotao), aoDisparar, FALLING);
}
void loop() {
if (disparou) {
Serial.println("Detectado! Desligando a interrupcao.");
detachInterrupt(digitalPinToInterrupt(pinoBotao));
disparou = false;
}
}
Notas e cuidados
- Passe o mesmo pino (via
digitalPinToInterrupt()) que você usou pra ligar a interrupção. - É útil pra "debounce" simples ou pra tratar um evento uma única vez, religando depois com
attachInterrupt()quando quiser voltar a escutar. - No Uno, faz sentido só nos pinos 2 e 3, os únicos com interrupção externa.