Cómo mostrar la hora de tu proyecto de Arduino Clock

  1. Ordenadores
  2. Arduino
  3. Cómo mostrar la hora de tu proyecto de Arduino Clock

Libro Relacionado

Por Brock Craft

Una vez que tengas algo en la pantalla para tu proyecto del reloj Arduino, es hora de leer la hora desde el módulo RTC y mostrarla. Más tarde, se añaden botones para programar la alarma y un interruptor para cambiar entre los modos Visualización de la hora, Ajuste de la alarma y Armado de la alarma.

En realidad, sólo hay dos cosas que puede mostrar con este reloj: la hora actual o la hora a la que desea que suene la alarma. En lugar de incluir el código para ambos en el bucle principal(), tiene sentido poner el procedimiento de visualización en su propia función.

Agregue el siguiente código a la sección de declaraciones de variables en la parte superior de su código:

RTC_DS1307 rtc; // Crear un reloj en tiempo real llamado rtcLiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Crear un LCD llamado lcdDateTime ahora;

Esto crea un objeto DateTime llamado ahora. El objeto DateTime es parte de la biblioteca RTC y es la única manera de obtener el tiempo del módulo RTC, aunque tiene muchas opciones y puede proporcionar horas, minutos, segundos, y el año, mes y día.

Luego, agregue el código en su bucle principal que lee la hora actual del módulo RTC, y agregue una función para actualizar la pantalla con la hora actual:

void loop(){now = rtc.now(); // Obtener la hora actual/// Actualizar el display updateDisplay();}

El objeto now DateTime almacena la hora actual tomada de la función rtc.now() para mostrar la hora y comprobar si es hora de activar la alarma.

Para mantener el código modular, la actualización del display se realiza en su propia función, fuera del bucle principal. Después de cerrar el bucle principal, añada la función updateDisplay() introduciendo el siguiente código:

void updateDisplay(){ int h = now.hour(); // Obtener las horas ahora mismo y almacenarlas en un número entero llamado h int m = now.minute(); // Obtener los minutos ahora mismo y almacenarlos en un número entero llamado m int s = now.second(); // Obtener los segundos ahora mismo y almacenarlos en un número entero llamado s lcd.setCursor(0, 0); // Fijar el cursor en la columna cero, fila superior... lcd.print(" La hora es: "); //...con espacios para borrar caracteres de la configuración de la alarma. lcd.setCursor(4, 1); // Mover el cursor a la columna cuatro, fila inferior si (h<10){ // Añadir un cero, si es necesario, como arriba lcd.print(0); } lcd.print(h); // Mostrar la hora actual lcd.setCursor(6, 1); // Mover a la siguiente columna lcd.print(":"); // E imprimir el lcd.setCursor(7, 1); // Mover a la siguiente columna si (m<10){ // Agregar un cero, si es necesario, como arriba lcd.print(0); } lcd.print(m); // Mostrar el minuto actual lcd.setCursor(9, 1); // Mover a la siguiente columna lcd.print(":"); // E imprimir el cursor lcd.setCursor(10, 1); // Mover a la siguiente columna si (s<10){ // Agregar un cero, si es necesario, como se indica arriba lcd.print(0); } lcd.print(s); // Mostrar la segunda columna actual }.

Envía este código a tu Arduino y mira lo que pasa. Si todo está bien y tu código se compila correctamente, ¡deberías estar en el negocio! La pantalla debe mostrar una hora que coincida con la de su ordenador.

En el código, la hora actual se solicita al objeto now y se coloca en tres variables enteras utilizadas sólo en la función updateDisplay. Estas variables tienen un alcance local, lo que significa que sólo pueden ser usadas dentro de updateDisplay(), y el resto del programa no sabe nada sobre ellas – lo que explica por qué no están declaradas al principio de su código.

Puede solicitar minutos de tiempo, horas y segundos por separado con now.hours(),now.minutes() y now.seconds(). Asignar cada uno de estos por separado a su propia variable entera (h, m, y s) es mucho más fácil que solicitar la hora actual de una sola vez.

Una vez analizado el tiempo en tres variables, lo principal en updateDisplay() es posicionar el cursor en la pantalla LCD e imprimir el texto correspondiente. El posicionamiento del cursor se realiza con lcd.setCursor(), que toma dos parámetros: número de columna y número de línea. Al fijar el cursor sólo se coloca en la posición correcta.

A continuación, debe indicarle a la pantalla lo que debe imprimir. La numeración comienza en cero, por lo que el carácter más arriba a la izquierda está en la columna 0 y en la fila 0. El cursor se coloca en la parte superior izquierda de la pantalla y la primera línea de texto se imprime con lcd.print («The time is:»).

Puede utilizar la función lcd.clear(), que borra todo el texto de la pantalla completa. Sin embargo, el reloj actualiza constantemente la pantalla, por lo que borrar la pantalla LCD cada vez que se ejecuta la función updateDisplay() puede introducir sólo un parpadeo notable. Un enfoque más simple (que utiliza una instrucción menos) es simplemente escribir los caracteres de espacio sobre lo que podría haber estado ya en la pantalla.

A continuación, el cursor se mueve cuatro espacios a la derecha y en la segunda fila, de modo que el tiempo se centra en la pantalla:

lcd.setCursor(4,1);

Una parte difícil de usar números enteros para obtener las horas, minutos y segundos es que no tienen un cero a la izquierda para los valores por debajo de 10. Necesita agregarlos manualmente, tanto para que el reloj se vea bien (por ejemplo, 01:05) como para mantener las horas, los minutos y los segundos en el mismo lugar en la pantalla.

La adición de los ceros a la izquierda se realiza de la misma manera durante horas, minutos y segundos:

si (h<10){ // Añadir un cero, si es necesario, como arriba lcd.print(0); } lcd.print(h); // Mostrar la hora actual

La sentencia condicional if comprueba si la hora actual es inferior a 10, y si es así, la sentencia print() imprime un cero. Después de esto, la pantalla LCD avanza automáticamente a la siguiente posición de la columna, de modo que cuando imprima la hora actual, almacenada en la variable entera h, tendrá un cero a la izquierda. Lo mismo ocurre con los minutos y los segundos.

También debe avanzar el cursor a la posición correcta para el cero inicial durante minutos y segundos. Se inserta dos puntos entre ellos con la sentencia lcd.print(«:»);.

Leave a Reply