Sigo, poco a poco, probando cositas para mí nuevas.
En esta ocasión ha sido la gestión de un reloj con un DS3231, midiendo temperatura (TMP36GT9Z), y mostrando los datos en un LCD de 20x4, conectado por I2C.
El principal reto para mí, ha sido resolver de forma satisfactoria la gestión del ajuste del reloj a través de los pulsadores (3)
El controlador, de momento, un Arduino Uno. Puede que pruebe con un Nano que tengo desocupado.
Actualiza pantalla con fecha, hora y temperatura cada 5 segundos.
Temperatura: suaviza las lecturas con una media móvil de las 10 últimas lecturas, y después muestra sólo resolución de medio grado.
Para la media, tengo dos funciones, una propia, y otra de una librería que surbyte ha recomendado.
surbyte:
prueba con este filtro y me cuentas luego Moving-Avarage-Filter--Arduino-Library
En el puerto serie muestro las dos informaciones.
A seguir pensando: algún efecto para mostrar los segundos en la tercera línea, quizá como una barra de progresión.
A mejorar: la respuesta de los pulsadores: algo perezosos. Quizá pruebe las interrupciones, que hasta ahora no lo he hecho.
Funcionamiento de los pulsadores:
//Primero.
//Pulsación simple en modo vis., apaga y enciende iluminación
//Pulsación simple en modo ajuste, resta un número el campo seleccionado
//Pulsación 2s en modo ajuste, sale sin guardar
//Segundo.
//Pulsación 2s en modo vis,. entra en modo ajuste
//Pulsación simple en modo ajuste, avanza campo
//Pulsación 2s en modo ajuste, sale guardando
//Tercero
//Pulsación simple en modo ajuste, suma un número al campo seleccionado
//Pulsación 2s en modo ajuste, sale sin guardar
No sé si me olvido alguna información esencial que no esté clara en los comentarios del código. Si no, lo siento, ya la añadiré si me decís.
Agradeceré sugerencias para mejora. Gracias.
Incluyo el código como adjunto, ya que por la longitud no me deja meterlo entre tags de código.
chema_reloj_lcd_v1.ino (12.7 KB)