Menu
CoddyTech

Alternar con cada pulsación

Parte de la sección Entradas del Journey de Arduino de Coddy. Lección 4 de 22.

Hasta ahora, el LED copiaba el botón: encendido mientras lo mantienes presionado, apagado al soltarlo. Un interruptor de lámpara funciona de otra manera: presiónalo una vez para encenderla y otra vez para apagarla. Eso es un interruptor de alternancia.

Para alternar, el sketch debe detectar el momento en que se presiona el botón: está presionado ahora, pero no lo estaba la última vez que se ejecutó loop(). A ese momento se le llama flanco. Guarda la última lectura en una variable por encima de setup(), como un contador:

int lastReading = HIGH;

void loop() {
  int reading = digitalRead(2);
  if (reading == LOW && lastReading == HIGH) {
    // se ha pulsado el botón
  }
  lastReading = reading;
}

Mantener presionado el botón mantiene la lectura en LOW, así que el flanco ocurre una vez por pulsación, sin importar cuánto tiempo lo mantengas presionado.

Para invertir un bool, usa !, que significa «no»: ledOn = !ledOn; convierte true en false y viceversa.

challenge icon

Desafío

Intermedio

El botón está en el pin 2 (INPUT_PULLUP) y el LED en el pin 13. Haz que cada pulsación alterne el LED:

  • cuando se pulsa el botón (LOW ahora, HIGH la última vez), invierte ledOn
  • guarda la lectura en lastReading al final de loop()
  • enciende o apaga el LED para que coincida con ledOn

Pulsa Run, pulsa el botón unas cuantas veces y después pulsa Check.

Pruébalo tú mismo

const int buttonPin = 2;
const int ledPin = 13;

bool ledOn = false;
int lastReading = HIGH;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int reading = digitalRead(buttonPin);
  // invierte ledOn cuando se pulse el botón
  // guarda esta lectura para la próxima vez
  // enciende o apaga el LED para que coincida con ledOn
}
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 Entradas

Practica por tu cuenta: Playground de Arduino