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.
Desafío
IntermedioHaz 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
}
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
1millis()
El reloj millis()Tiempos en unsigned longParpadear sin esperasDos LED, dos velocidadesParpadear mientras un botón cambia de estadoUna luz con temporizadorPractica por tu cuenta: Playground de Arduino