image2.jpg

Cómo mostrar la hora de su proyecto de reloj Arduino

Una vez que tenga algo en la pantalla para su Proyecto de Reloj Arduino, es hora de leer la hora del módulo RTC y mostrarlo. Luego, agrega botones para programar la alarma y un interruptor para cambiar entre los modos Visualización de hora, Ajuste de alarma y Armado de alarma.

En realidad, solo 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; // Crea un reloj en tiempo real llamado rtc
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); // Crea una pantalla LCD llamada lcd
DateTime ahora;

Esto crea un objeto DateTime llamado ahora . El objeto DateTime es parte de la biblioteca RTC y es la única forma 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.

A continuación, 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:

bucle vacío () {
ahora = rtc.now (); // Obtener la hora actual
// Actualizar la pantalla
 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 de la pantalla se realiza en su propia función, fuera del bucle principal. Después de cerrar el ciclo principal, agregue la función updateDisplay () ingresando el siguiente código:

void updateDisplay () {
 int h = ahora.hora (); // Obtenga las horas ahora mismo y guárdelas en un número entero llamado h
 int m = ahora.minuto (); // Obtenga los minutos ahora mismo y guárdelos en un número entero llamado m
 int s = ahora.segundo (); // Obtenga los segundos ahora mismo y guárdelos en un número entero llamado s
 lcd.setCursor (0, 0); // Coloca el cursor en la columna cero, fila superior ...
 lcd.print ("La hora es:"); // ... con espacios para borrar los caracteres de la configuración de la alarma.
 lcd.setCursor (4, 1); // Mueve el cursor a la columna cuatro, fila inferior
 if (h <10) {// Agrega un cero, si es necesario, como arriba
  lcd.print (0);
 }
 lcd.print (h); // Muestra la hora actual
 lcd.setCursor (6, 1); // Pasar a la siguiente columna
 lcd.print (":"); // E imprime los dos puntos
 lcd.setCursor (7, 1); // Pasar a la siguiente columna
 if (m <10) {// Agrega un cero, si es necesario, como arriba
  lcd.print (0);
 }
 lcd.print (m); // Muestra el minuto actual
 lcd.setCursor (9, 1); // Pasar a la siguiente columna
 lcd.print (":"); // E imprime los dos puntos
 lcd.setCursor (10, 1); // Pasar a la siguiente columna
 if (s <10) {// Agrega un cero, si es necesario, como arriba
  lcd.print (0);
 }
 lcd.print (s); // Muestra el segundo actual
 }

Envíe este código a su Arduino y vea qué sucede. Si todo está bien y su código se compila correctamente, ¡debería estar en el negocio! La pantalla debe mostrar una hora que coincida con la de su computadora.

LEER  Lo que debe saber sobre el entorno Arduino

En el código, la hora actual se solicita al objeto ahora y se coloca en tres variables enteras que se usan solo en la función updateDisplay . Estas variables tienen un alcance local , lo que significa que solo se pueden usar dentro de updateDisplay (), y el resto del programa no sabe nada sobre ellas, lo que explica por qué no se declaran al principio de su código.

Solicita minutos, horas y segundos de tiempo 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.

Habiendo analizado el tiempo en tres variables, lo principal que sucede en updateDisplay () es colocar el cursor en la pantalla LCD e imprimir el texto relevante. El posicionamiento del cursor se realiza con lcd.setCursor () , que toma dos parámetros: número de columna y número de línea. Establecer el cursor solo lo coloca en la posición correcta.

A continuación, debe indicarle a la pantalla qué imprimir. La numeración comienza en cero, por lo que el carácter de la parte superior izquierda está en la columna 0 y 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 (“La hora es:” ) .

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

LEER  Cómo calibrar sus entradas con Arduino

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);

Un aspecto complicado sobre el uso de números enteros para obtener las horas, los minutos y los segundos es que no tienen un cero a la izquierda para los valores inferiores a 10. Debe agregarlos manualmente, tanto para que el reloj se vea bien (por ejemplo, 01 : 05) y para mantener las horas, minutos y segundos en el mismo lugar de la pantalla.

La suma de los ceros iniciales se realiza de la misma manera durante horas, minutos y segundos:

if (h <10) {// Agrega un cero, si es necesario, como arriba
 lcd.print (0);
 }
 lcd.print (h); // Muestra la hora actual

La instrucción if condicional prueba si la hora actual es menor que 10, y si es así, la instrucción print () imprime un cero. Después de esto, la pantalla LCD avanza automáticamente a la posición de la siguiente columna, por lo que cuando imprime 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 hacer avanzar el cursor a la posición correcta para el cero inicial durante minutos y segundos. Inserta dos puntos entre ellos con lcd.print (“:”); declaración.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *