- Conecta un LED a tu Arduino
- Sube el sketch de parpadeo (blink) predeterminado que enciende y apaga el LED cada segundo

¿Cómo funciona la función delay()?
El funcionamiento de la función delay() de Arduino es bastante sencillo. Acepta un único entero como argumento. Este número representa el tiempo en milisegundos que el programa debe esperar hasta pasar a la siguiente línea de código. Cuando haces delay(1000) tu Arduino se detiene en esa línea durante 1 segundo. delay() es una función de bloqueo. Las funciones de bloqueo impiden que un programa haga algo más hasta que se complete esa tarea en particular. Si necesita que se realicen varias tareas al mismo tiempo, simplemente no puede usar delay(). Si su aplicación requiere que lea y guarde constantemente datos de las entradas, debe evitar usar la función delay() . Afortunadamente, existe una solución.Función millis() al rescate
La función millis() , cuando se llama, devuelve la cantidad de milisegundos que han pasado desde que se inició el programa por primera vez¿Por qué es eso útil?
Porque usando algo de matemática, puedes verificar fácilmente cuánto tiempo ha pasado sin bloquear tu código. El esquema que se muestra a continuación muestra cómo se puede utilizar la función millis() para crear un proyecto de parpadeo. Enciende la luz LED durante 1000 milisegundos y luego la apaga. Pero lo hace de una manera que no es bloqueante . Veamos con más detalle unsketch
de parpadeo que funciona sin una función de retardo:Sketch
/*
Blink without Delay, example here: arduino.cc/en/Tutorial/BlinkWithoutDelay
*/
// constants won't change. Used here to set a pin number :
const int ledPin = 13; // the number of the LED pin
// Variables will change :
int ledState = LOW; // ledState used to set the LED
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated
// constants won't change :
const long interval = 1000; // interval at which to blink (milliseconds)
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}
void loop() {
// here is where you'd put code that needs to be running all the time.
// check to see if it's time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}¿Qué función deberías utilizar?
Hemos aprendido dos formas diferentes de manejar el tiempo con Arduino. El uso de las funciones millis() requiere un poco más de trabajo en comparación con el uso de delay() . Pero sus programas no pueden realizar múltiples tareas en Arduino sin ellas.Preguntas frecuentes
¿Por qué no debería usar delay() en Arduino?
Porque bloquea el programa: mientras dura el delay, el Arduino no puede hacer absolutamente nada más. No puede leer un botón, atender un sensor ni responder a nada, y queda simplemente esperando.
¿Qué alternativa hay a delay()?
La función millis(), que devuelve el tiempo transcurrido desde que arrancó la placa. En vez de detener el programa, se compara ese tiempo con una marca anterior y se actúa cuando ha pasado el intervalo deseado.
¿Cómo funciona la función delay()?
Detiene por completo la ejecución del programa durante la cantidad de milisegundos indicada. Es lo que hace el sketch Blink por defecto, y por eso funciona bien mientras el programa solo tenga que hacer una cosa.
¿Entonces delay() nunca sirve?
Sirve cuando el programa hace una sola cosa y no necesita responder a nada más, como el ejemplo Blink. El problema aparece al agregar botones, sensores o comunicaciones, que quedan desatendidos mientras el delay corre.
Aprende esto en un curso
Si prefieres verlo en vivo y con alguien que resuelva tus dudas, estos cursos presenciales de MCI Educación cubren el tema de este tutorial:
- Arduino desde Cero: Primeros Pasos en Programación — nivel inicial, 15 horas presenciales en Santiago
- Arduino en profundidad: Sensores y actuadores para proyectos reales — nivel intermedio, 12 horas presenciales en Santiago