Curso C para Arduino
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.
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.
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}