Cómo programar con la librería time.h en arduino

12/08/2012

Arduino, la plataforma de prototipado electrónico de código abierto, ofrece una amplia gama de posibilidades para desarrollar proyectos interactivos y automatizados. Una parte fundamental de muchos de estos proyectos radica en la gestión precisa del tiempo, y para ello, la librería time.h (aunque no es una librería específica de Arduino, sus funciones son ampliamente utilizadas) se vuelve una herramienta indispensable.

En este artículo, exploraremos a fondo cómo utilizar las funciones de manejo de tiempo en Arduino, centrándonos en cómo obtener el tiempo transcurrido, gestionar eventos a intervalos específicos y realizar otras tareas cronometradas.

Temario

Millis() - La Función Clave para Medir Tiempo en Arduino

La función millis() es la función principal para la gestión del tiempo en Arduino. Esta función devuelve el número de milisegundos transcurridos desde que se encendió el microcontrolador. Es una función esencial para implementar temporizadores y controlar el flujo de eventos en tiempo real. Su sintaxis es extremadamente simple:

unsigned long tiempo = millis();

Donde:

  • unsigned long : El tipo de dato utilizado es crucial, ya que un dato de tipo int no sería suficiente para representar los milisegundos transcurridos en un tiempo considerable (un int podría desbordarse en cuestión de minutos). unsigned long proporciona un rango mucho mayor.
  • millis() : La función que devuelve el tiempo en milisegundos.
  • tiempo : Una variable donde se almacena el valor devuelto.

Un punto importante a considerar es que millis() se reinicia a cero después de 50 días aproximadamente debido al límite del tipo de dato unsigned long. Si se necesita una temporización superior a este período, se deben implementar mecanismos más complejos para realizar un seguimiento del tiempo.

Ejemplos Prácticos con millis()

Ejemplo 1: Imprimiendo un Mensaje Cada Segundo sin Retardos (delay())

Evitar el uso de delay()es crucial en la programación de Arduino porque bloquea la ejecución de otras partes del código. millis() nos permite crear temporizadores sin detener el programa principal.

En este ejemplo, se imprime un mensaje en el monitor serial cada segundo sin utilizar delay(). Necesitaremos dos variables: una para almacenar el tiempo de inicio y otra para comparar el tiempo actual.

unsigned long tiempoAnterior = 0;
unsigned long tiempoActual;

void loop() {
tiempoActual = millis();

if (tiempoActual - tiempoAnterior >= 1000) {
Serial.println("Ha pasado un segundo");
tiempoAnterior = tiempoActual;
}
}

Este código compara el tiempo actual con el tiempo anterior. Si la diferencia es mayor o igual a 1000 milisegundos (1 segundo), imprime el mensaje y actualiza la variable tiempoAnterior.

Ejemplo 2: Medir el Tiempo Entre Dos Eventos

En este ejemplo, medimos el tiempo transcurrido entre dos pulsaciones de un botón o entre la recepción de dos caracteres específicos a través del puerto serial:

unsigned long tiempoInicio = 0;
unsigned long tiempoFinal;

void loop() {
if (Serial.available() > 0) {
char caracter = Serial.read();
if (caracter == 'A') {
tiempoInicio = millis();
} else if (caracter == 'B' && tiempoInicio > 0) {
tiempoFinal = millis();
Serial.print("Tiempo transcurrido: ");
Serial.print(tiempoFinal - tiempoInicio);
Serial.println(" ms");
tiempoInicio = 0;
}
}
}

Este código guarda el tiempo de inicio cuando se recibe la letra 'A' y el tiempo final cuando se recibe la letra 'B'. La diferencia entre ambos tiempos representa el tiempo transcurrido.

Otras Funciones de Manejo del Tiempo

Además de millis(), existen otras funciones que pueden resultar útiles para la gestión del tiempo en Arduino:

  • micros() : Similar a millis() , pero devuelve el tiempo en microsegundos. Es útil para medir tiempos muy cortos.
  • Librerías de tiempo adicionales: Existen librerías de terceros que ofrecen funciones más avanzadas para la gestión del tiempo, como la programación de tareas a intervalos regulares o la sincronización con un reloj externo.

Tabla Comparativa de Funciones de Tiempo

Función Unidad Rango Observaciones
millis() Milisegundos Aproximadamente 50 días Se reinicia a cero después del rango máximo.
micros() Microsegundos Menor que millis() Útil para tiempos muy cortos.

Consideraciones Importantes

Es fundamental comprender las limitaciones del tipo de dato unsigned longpara evitar errores de desbordamiento. Si se requieren temporizadores a largo plazo, se deben implementar estrategias para manejar el desbordamiento, por ejemplo, restableciendo el contador a cero cada cierto tiempo y realizando un seguimiento de los ciclos transcurridos.

La precisión de las funciones millis()y micros()puede verse afectada por otros procesos que se ejecutan en el microcontrolador. Para aplicaciones que requieren una alta precisión temporal, se pueden considerar alternativas como relojes de tiempo real (RTC).

La programación de tiempo en Arduino es una habilidad crucial para la creación de proyectos robustos e interactivos. Conocer y dominar las funciones de manejo del tiempo, como millis() y micros(), es esencial para cualquier desarrollador que trabaje con Arduino.

Si quieres conocer otros artículos parecidos a Cómo programar con la librería time.h en arduino puedes visitar la categoría Libros y Librerías.

Subir