Arduino librería time.h: sus funciones y aplicaciones

24/08/2024

Valoración: 2.92 (261 votos)

El manejo del tiempo es fundamental en la programación de Arduino para crear proyectos interactivos y funcionales. La librería Time.h, junto con otras librerías complementarias, proporciona las herramientas necesarias para controlar el tiempo con precisión en tus proyectos.

Temario

Funciones Básicas de la Librería Time.h

La librería Time.h ofrece un conjunto de funciones esenciales para gestionar el tiempo en Arduino. Estas funciones se basan en el reloj interno del microcontrolador, pero pueden ser sincronizadas con relojes de tiempo real (RTC) para mayor precisión y persistencia incluso con la alimentación apagada.

millis()

La función millis() devuelve el número de milisegundos transcurridos desde que el programa Arduino comenzó a ejecutarse. Este valor es un entero largo sin signo (unsigned long int) que se reinicia aproximadamente cada 50 días. Su utilidad radica en medir el tiempo de ejecución de un fragmento de código o controlar eventos con base en el tiempo transcurrido.

micros()

Similar a millis(), la función micros() devuelve el número de microsegundos transcurridos desde el inicio del programa. Su valor también es un entero largo sin signo (unsigned long int), pero se reinicia aproximadamente cada 70 minutos. Se usa para medir tiempos muy cortos con mayor precisión que millis().

delay(milisegundos)

La función delay() detiene la ejecución del programa durante un tiempo específico, expresado en milisegundos. Es una herramienta indispensable para crear pausas entre acciones, controlar la frecuencia de señales o simplemente permitir que un evento se complete antes de continuar.

delayMicroseconds(microsegundos)

Similar a delay(), pero con una resolución en microsegundos, permitiendo pausas aún más precisas.

Ejemplo Básico con millis() y delay()

Este ejemplo muestra cómo usar millis() y delay() para controlar un LED:

void setup() { pinMode(13, OUTPUT); // Configura el pin 13 como salida Serial.begin(9600); // Inicializa la comunicación serial}void loop() { unsigned long startTime = millis(); // Guarda el tiempo de inicio digitalWrite(13, HIGH); // Enciende el LED delay(1000); // Espera 1 segundo digitalWrite(13, LOW); // Apaga el LED unsigned long endTime = millis(); // Guarda el tiempo de finalización Serial.print("Tiempo de ejecución: "); Serial.print(endTime - startTime); // Imprime la diferencia de tiempos Serial.println(" ms"); delay(1000); // Espera 1 segundo}

Interrupciones en Arduino y la Librería Time.h

Las interrupciones permiten realizar tareas en segundo plano sin bloquear el flujo principal del programa. Aunque Time.h no gestiona directamente las interrupciones, su uso está estrechamente relacionado con ellas, especialmente al trabajar con temporizadores y eventos que requieren una respuesta inmediata.

Funciones de Interrupciones

  • noInterrupts(): Desactiva las interrupciones.
  • interrupts(): Reactiva las interrupciones.
  • attachInterrupt(pin, ISR, mode): Asocia una función de interrupción (ISR) a un pin específico. El modo define el tipo de evento que activará la interrupción (LOW, CHANGE, FALLING, RISING).
  • detachInterrupt(pin): Desasocia la función de interrupción de un pin.

Las interrupciones son cruciales para tareas en tiempo real, como la lectura de sensores o la gestión de eventos externos sin afectar la ejecución del programa principal. La librería Time.h proporciona las funciones básicas de temporización que se pueden utilizar junto con las funciones de interrupciones para crear aplicaciones robustas.

Relojes de Tiempo Real (RTC) y la Librería Time.h

El reloj interno de Arduino tiene limitaciones, como el reinicio periódico. Para aplicaciones que requieren una mayor precisión y persistencia del tiempo, se utilizan Relojes de Tiempo Real (RTC). Estos chips mantienen la hora incluso cuando el Arduino está apagado. La librería Time.h se puede integrar con librerías específicas de RTC, como DS1307RTC, para sincronizar la hora y utilizar las funciones de Time.h con la hora proporcionada por el RTC.

Librería DS1307RTC

La librería DS1307RTC permite interactuar con el chip RTC DS130Su integración con Time.h facilita la obtención de la fecha y hora del RTC y la sincronización del tiempo en el programa Arduino.

Librería TimeAlarms

La librería TimeAlarms es una herramienta complementaria a Time.h que simplifica la programación de alarmas y temporizadores. Permite definir eventos que se ejecuten en momentos específicos o a intervalos regulares, sin la necesidad de realizar complejas rutinas de temporización.

Funciones de TimeAlarms

  • Alarm.alarmRepeat(horas, minutos, segundos, función): Crea una alarma que se repite diariamente.
  • Alarm.alarmOnce(horas, minutos, segundos, función): Crea una alarma que se ejecuta una sola vez.
  • Alarm.timerRepeat(segundos, función): Crea un temporizador que se repite a intervalos regulares.
  • Alarm.timerOnce(segundos, función): Crea un temporizador que se ejecuta una sola vez.

TimeAlarms simplifica la creación de temporizadores y alarmas, haciendo que la programación de eventos programados sea más fácil y eficiente.

Tabla Comparativa de Funciones de Tiempo

Función Librería Descripción Resolución Reinicio
millis() Time.h Milisegundos desde el inicio 1 ms ~50 días
micros() Time.h Microsegundos desde el inicio 1 µs ~70 minutos
delay() Time.h Pausa en milisegundos 1 ms -
delayMicroseconds() Time.h Pausa en microsegundos 1 µs -
Alarm.alarmRepeat() TimeAlarms Alarma repetitiva 1 s -
Alarm.alarmOnce() TimeAlarms Alarma única 1 s -
Alarm.timerRepeat() TimeAlarms Temporizador repetitivo 1 s -
Alarm.timerOnce() TimeAlarms Temporizador único 1 s -

Consideraciones Adicionales

La precisión del tiempo depende del reloj utilizado. El reloj interno de Arduino es susceptible a errores, mientras que un RTC ofrece mayor precisión y persistencia. La selección de la función adecuada depende de la precisión y la duración requerida. Para tiempos muy cortos, micros() es la opción ideal, mientras que para periodos más largos, millis() es suficiente. delay() y delayMicroseconds() bloquean la ejecución del programa, por lo que deben usarse con cuidado en aplicaciones que requieren respuesta en tiempo real.

Las interrupciones ofrecen una forma eficiente de gestionar eventos en segundo plano sin bloquear el flujo principal del programa, permitiendo una mejor respuesta y un uso más eficiente de los recursos del microcontrolador. La correcta implementación de las interrupciones es crucial para garantizar el buen funcionamiento del sistema. El uso de librerías complementarias como TimeAlarms permite gestionar eventos programados de forma sencilla, simplificando el código y mejorando la legibilidad.

Si quieres conocer otros artículos parecidos a Arduino librería time.h: sus funciones y aplicaciones puedes visitar la categoría Libros y Librerías.

Subir