interrupts()

interrupts()

Este é o par que "religa" as interrupções depois de você tê-las pausado. Sempre que usa noInterrupts() pra proteger um trecho crítico do código, você chama interrupts() logo em seguida pra o Arduino voltar a atender os eventos normalmente. Por padrão, as interrupções já ficam ligadas — então você só precisa dele pra desfazer um noInterrupts().

Sintaxe

interrupts();

Parâmetros

Nenhum.

Retorno

Nada (void).

Exemplo

volatile unsigned long contagem = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  unsigned long copia;

  noInterrupts();      // pausa: leitura segura de uma variavel de 32 bits
  copia = contagem;
  interrupts();        // religa as interrupcoes

  Serial.println(copia);
  delay(200);
}

Notas e cuidados

  • Use pra proteger a leitura ou escrita de variáveis volatile grandes (como long), que não são atualizadas de uma vez só no Uno de 8 bits.
  • Mantenha o intervalo entre noInterrupts() e interrupts() o mais curto possível: enquanto as interrupções estão desligadas, millis() para de contar e eventos podem ser perdidos.
  • Nos bastidores ele equivale à instrução sei() do AVR (habilita as interrupções).

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

Conhecer o Curso Maker