En los primeros proyectos con Arduino es común usar la función delay() para controlar el tiempo. Sin embargo, esta función tiene una gran limitación: detiene completamente el programa mientras espera.
En este artículo aprenderás a hacer parpadear un LED sin usar delay(), utilizando una técnica más avanzada y profesional con la función millis().
🎯 Objetivo
Lograr que un LED parpadee sin bloquear el programa, permitiendo ejecutar otras tareas al mismo tiempo.
⚠️ Problema con delay()
Ejemplo clásico:
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
👉 ¿Qué pasa aquí?
- Arduino se detiene completamente durante cada delay()
- No puede leer botones ni sensores en ese tiempo
- No permite hacer múltiples tareas
🧠 ¿Qué es millis()?
La función millis() devuelve el tiempo en milisegundos desde que el Arduino comenzó a ejecutar el programa.
👉 Es como un cronómetro interno que nunca se detiene.
🔌 Materiales
- 1 Arduino Uno
- 1 LED
- 1 resistencia (220Ω)
- Protoboard y cables
⚡ Conexión
- LED (ánodo) → Pin 8
- LED (cátodo) → Resistencia → GND
💻 Código Arduino
int led = 8;
unsigned long tiempoAnterior = 0;
int intervalo = 1000; // 1 segundo
int estadoLed = LOW;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
unsigned long tiempoActual = millis();
if (tiempoActual - tiempoAnterior >= intervalo) {
tiempoAnterior = tiempoActual; // Cambia el estado del LED
if (estadoLed == LOW) {
estadoLed = HIGH;
}
else { estadoLed = LOW;
}
digitalWrite(led, estadoLed);
}
}🔍 Explicación del Código
- millis() obtiene el tiempo actual
- Se compara con el tiempo anterior
- Si pasa el intervalo (1 segundo), se ejecuta la acción
- El LED cambia de estado sin detener el programa
🔁 ¿Qué ventaja tiene?
✔ Permite hacer varias cosas al mismo tiempo
✔ Arduino no se “congela”
✔ Es la base de proyectos más avanzados
🚀 Mejora del ejercicio
Puedes combinar este código con otros elementos:
- 🔘 Leer un botón mientras el LED parpadea
- 🎚️ Cambiar la velocidad con un potenciómetro
- 🔊 Activar un buzzer al mismo tiempo
🧾 Conclusión
El uso de millis() en lugar de delay() es un paso fundamental para pasar de proyectos básicos a proyectos más profesionales con Arduino. Permite crear sistemas más eficientes, dinámicos y capaces de realizar múltiples tareas al mismo tiempo.
💡 Consejo: Intenta modificar el intervalo para cambiar la velocidad del parpadeo.
[warning title="Simulación en Wokwi" icon="check-circle"] https://wokwi.com/projects/458781252932657153 [/warning]


Publicar un comentario