Dos LED, dos velocidades
Parte de la sección Temporización sin delay del Journey de Arduino de Coddy. Lección 4 de 18.
Con delay(), hacer parpadear dos LED a distintas velocidades es un rompecabezas: cada espera retrasa al otro LED. Con millis() es fácil, porque nada espera.
Asigna a cada tarea sus propias variables: su propio último instante y su propio estado. Después, asigna a cada tarea su propio if en loop(). En cada iteración, cada tarea comprueba su propio reloj y actúa solo cuando llega el momento:
unsigned long redPrevious = 0;
unsigned long greenPrevious = 0;
void loop() {
unsigned long now = millis();
if (now - redPrevious >= 500) {
redPrevious = now;
// cambia el estado del LED rojo
}
if (now - greenPrevious >= 200) {
greenPrevious = now;
// cambia el estado del LED verde
}
}Las dos tareas nunca se estorban. Puedes añadir una tercera y una cuarta de la misma manera: un conjunto de variables y un if para cada una.
Nunca compartas una sola variable para el último instante entre dos tareas. La tarea más rápida la reinicia tan a menudo que la más lenta nunca alcanza su intervalo.
Desafío
FácilEl LED rojo del pin 13 ya cambia cada 500 ms. Haz que el LED verde del pin 12 cambie cada 200 ms al mismo tiempo:
- añade las variables
greenPreviousygreenState - añade un segundo
ifenloop()para el LED verde
Pulsa Run y observa cómo parpadean ambos; después, pulsa Check.
Pruébalo tú mismo
const int redLed = 13;
const int greenLed = 12;
unsigned long redPrevious = 0;
int redState = LOW;
// añade aquí las dos variables del LED verde
void setup() {
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
}
void loop() {
unsigned long now = millis();
// el LED rojo cambia de estado cada 500 ms
if (now - redPrevious >= 500) {
redPrevious = now;
if (redState == LOW) {
redState = HIGH;
} else {
redState = LOW;
}
digitalWrite(redLed, redState);
}
// haz que el LED verde cambie de estado cada 200 ms aquí
}
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