Menu
CoddyTech

FALLING, RISING e CHANGE

Parte da seção Temporização sem delay do Journey de Arduino da Coddy. Lição 13 de 18.

O Uno tem dois pinos que podem disparar uma interrupção: o pino 2 e o pino 3. Um botão que precisa de uma interrupção deve ser conectado a um deles. Dentro do chip, eles são as interrupções 0 e 1, então deixe digitalPinToInterrupt() transformar o pino em seu número. attachInterrupt(3, ...) solicita a interrupção 3, que o Uno não tem, e nada acontece.

A última parte de attachInterrupt() indica a qual mudança reagir:

  • FALLING: o pino vai de HIGH para LOW (com um pull-up, ao pressionar)
  • RISING: o pino vai de LOW para HIGH (ao soltar)
  • CHANGE: qualquer uma das duas

Com CHANGE, a ISR é executada ao pressionar e ao soltar. Ela lê o pino para descobrir qual dos dois aconteceu:

void onChange() {
  if (digitalRead(buttonPin) == LOW) {
    // o botão foi pressionado
  } else {
    // o botão foi solto
  }
}

attachInterrupt(digitalPinToInterrupt(buttonPin), onChange, CHANGE);
challenge icon

Desafio

Fácil

O botão está no pino 3, e loop() está ocupado com uma tarefa lenta. Faça o LED no pino 13 acompanhar o botão instantaneamente:

  • em onChange(), leia o botão: LOW acende o LED, HIGH o apaga
  • associe onChange() ao pino do botão com CHANGE

Pressione Run, mantenha o botão pressionado e solte-o; depois, pressione Check.

Experimente você mesmo

const int ledPin = 13;
const int buttonPin = 3;

// Executa sempre que o estado do pino do botão muda.
void onChange() {
  // acenda o LED quando o botão estiver pressionado e apague-o quando for solto
}

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  // associe onChange() ao pino do botão aqui
}

void loop() {
  // a tarefa lenta: mantenha-a como está
  Serial.println("working");
  delay(2000);
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Temporização sem delay

Pratique por conta própria: Playground de Arduino