Menu
CoddyTech

FALLING, RISING y CHANGE

Parte de la sección Temporización sin delay del Journey de Arduino de Coddy. Lección 13 de 18.

El Uno tiene dos pines que pueden activar una interrupción: el pin 2 y el pin 3. Un botón que necesita una interrupción debe conectarse a uno de ellos. Dentro del chip son la interrupción 0 y la interrupción 1, así que deja que digitalPinToInterrupt() convierta el pin en su número. attachInterrupt(3, ...) solicita la interrupción 3, que el Uno no tiene, y no ocurre nada.

La última parte de attachInterrupt() indica a qué cambio reaccionar:

  • FALLING: el pin pasa de HIGH a LOW (con una resistencia pull-up, al pulsar)
  • RISING: el pin pasa de LOW a HIGH (al soltar)
  • CHANGE: cualquiera de los dos

Con CHANGE, la ISR se ejecuta al pulsar y al soltar. Lee el pin para averiguar cuál de las dos cosas ocurrió:

void onChange() {
  if (digitalRead(buttonPin) == LOW) {
    // se pulsó
  } else {
    // se soltó
  }
}

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

Desafío

Fácil

El botón está en el pin 3 y loop() está ocupado con una tarea lenta. Haz que el LED del pin 13 siga al botón al instante:

  • en onChange(), lee el botón: LOW enciende el LED, HIGH lo apaga
  • conecta onChange() al pin del botón con CHANGE

Presiona Run, mantén presionado y suelta el botón, después presiona Check.

Pruébalo tú mismo

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

// Se ejecuta cada vez que cambia el estado del pin del botón.
void onChange() {
  // enciende el LED cuando el botón está pulsado y apágalo cuando se suelta
}

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  // asocia onChange() al pin del botón aquí
}

void loop() {
  // la tarea lenta: déjala como está
  Serial.println("working");
  delay(2000);
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Temporización sin delay

Practica por tu cuenta: Playground de Arduino