Manejo de tiempo
1. delay(): Pausas simples #
La función delay() detiene la ejecución del programa durante una cantidad de milisegundos especificada. Es útil para tareas simples donde no importa que el microcontrolador se detenga temporalmente.
Sintaxis:
1delay(milisegundos);
Ejemplo:
1digitalWrite(13, HIGH); 2delay(1000); // espera 1 segundo 3digitalWrite(13, LOW); 4delay(1000); // espera otro segundo
Desventaja:
Mientras se ejecuta delay(), Arduino no puede hacer nada más. No puede leer sensores ni responder a eventos.
2. millis(): Medición de tiempo sin bloquear #
millis() devuelve el número de milisegundos que han pasado desde que la placa comenzó a ejecutarse. Con esta función puedes controlar el tiempo sin detener la ejecución del programa.
Sintaxis:
1unsigned long tiempo = millis();
Ejemplo - Parpadeo sin delay():
1const int pinLED = 13; 2unsigned long tiempoAnterior = 0; 3const long intervalo = 1000; // 1 segundo 4bool estadoLED = false; 5 6void setup() { 7 pinMode(pinLED, OUTPUT); 8} 9 10void loop() { 11 unsigned long tiempoActual = millis(); 12 13 if (tiempoActual - tiempoAnterior >= intervalo) { 14 tiempoAnterior = tiempoActual; 15 16 estadoLED = !estadoLED; // alterna el estado del LED 17 digitalWrite(pinLED, estadoLED); 18 } 19}
Este enfoque permite realizar otras tareas mientras el LED parpadea.
3. Temporizadores simples #
Puedes usar millis() para ejecutar diferentes tareas con diferentes intervalos en paralelo.
Ejemplo – Dos LEDs parpadeando a diferente ritmo:
1const int led1 = 8; 2const int led2 = 9; 3unsigned long t1 = 0, t2 = 0; 4const long intervalo1 = 500; // LED1 cada 500ms 5const long intervalo2 = 1000; // LED2 cada 1000ms 6bool estado1 = false, estado2 = false; 7 8void setup() { 9 pinMode(led1, OUTPUT); 10 pinMode(led2, OUTPUT); 11} 12 13void loop() { 14 unsigned long ahora = millis(); 15 16 if (ahora - t1 >= intervalo1) { 17 t1 = ahora; 18 estado1 = !estado1; 19 digitalWrite(led1, estado1); 20 } 21 22 if (ahora - t2 >= intervalo2) { 23 t2 = ahora; 24 estado2 = !estado2; 25 digitalWrite(led2, estado2); 26 } 27}
Resumen del tema
Conceptos clave #
- Retardos Bloqueantes (
delay()): pausan por completo la CPU del microcontrolador impidiendo responder a entradas o eventos durante la espera. - Temporización Asíncrona (
millis()): contador continuo en milisegundos de tipounsigned longque permite verificar intervalos transcurridos sin detener el programa. - Patrón de Temporizadores Concurrentes: registro de marcas de tiempo previas (
tiempoAnterior) para ejecutar múltiples tareas periódicas con cadencias independientes.
Qué debes recordar #
Sustituir delay() por el patrón millis() - tiempoAnterior >= intervalo permite al microcontrolador ejecutar múltiples procesos en paralelo sin bloquear la lectura de sensores ni la respuesta a eventos.