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 no attachInterrupt().

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.

Quer aprender a usar isso em projetos reais, do zero?

Conhecer o Curso Maker