Menu
CoddyTech

Parpadear mientras un botón cambia de estado

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

Un sketch que nunca espera puede vigilar un botón y ejecutar un parpadeo al mismo tiempo. Cada bucle tarda unos microsegundos, así que la placa mira el botón miles de veces por segundo y detecta incluso una pulsación muy breve.

El parpadeo sigue el patrón de millis(). El botón usa la comprobación de flanco de la sección Entradas: actúa cuando el botón está pulsado ahora y no estaba pulsado en el bucle anterior. ! significa «no», así que !wasPressed se lee como «no estaba pulsado».

bool wasPressed = false;

void loop() {
  // el parpadeo: if (now - previous >= 500) { ... }

  bool pressed = digitalRead(buttonPin) == LOW;
  if (pressed && !wasPressed) {
    // el botón acaba de pulsarse
  }
  wasPressed = pressed;
}

Pon ambas partes en loop(), una después de la otra, y evita usar delay() en cualquiera de ellas. Si el parpadeo esperara 500 ms, no se detectaría una pulsación que empezara y terminara durante la espera.

challenge icon

Desafío

Intermedio

Haz que la placa haga dos cosas a la vez:

  • el LED rojo del pin 13 cambia de estado cada 500 ms, con el tiempo medido mediante millis()
  • cada vez que pulses el botón, cambia el estado del LED amarillo del pin 12: encendido, después apagado y después encendido

Un toque rápido debe funcionar en cualquier momento, y mantener pulsado el botón cambia el estado del LED amarillo una sola vez. Pulsa Run, toca el botón y después pulsa Check.

Pruébalo tú mismo

const int redLed = 13;
const int yellowLed = 12;
const int buttonPin = 2;

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

void loop() {
  // 1. cambia el estado del LED rojo cada 500 ms, con millis()

  // 2. cada pulsación del botón enciende o apaga el LED amarillo
}
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