Paso 3: programación
El primer reto de este proyecto era encontrar la manera de poner toda la información en una sola pantalla de 8 x 8 y también gestionar todos los LEDs para conseguir los resultados de parpadear, activar o desactivar en posición correcta.
En primer lugar, hice un modelo en una hoja de cálculo de Excel que simula esta operación con un programa de Visual Basic.
Después de eso, me mudé a la lógica relacionada con Arduino, pensando en las bibliotecas que me ayudaría, principalmente relacionados con temporizadores que admiten la paginación entre la visualización del calendario y el reloj digital y también relacionados con el temporizador para que lea el codificador.
Mi opción para utilizar el codificador es debido a su exactitud. Intenté utilizar potenciómetros, pero el resultado no fue satisfactorio debido a que la señal analógica no es constante que causan variación en el cálculo de resultados a mostrar en la pantalla.
Para el temporizador, decidió aplicar la TimerOne biblioteca para leer el codificador cada 1 milisecond y los resultados fueron realmente muy buenos.
Para administrar la característica de paginación, utiliza las funciones while() y millis() para controlar el bucle del calendario durante 30 segundos y luego se limpia la pantalla para presentar el reloj digital.
Estas son las librerías que necesita el puesto en el IDE de Arduino:
- Time.h - biblioteca con funciones de fecha y hora
- LedControl.h - biblioteca para el control de la matriz de LED
- Wire.h - biblioteca para apoyar el DS130RTC
- DS130RTC, h - biblioteca de reloj en tiempo Real
- Bounce2.h - biblioteca para leer el botón del codificador
- TimerOne.h - biblioteca de temporizador 1 leer el encoder.
Relacionados con cálculo de fases lunares, mi opción fue aplicar un algoritmo que sería bastante bueno pero sin el rigor científico de un método de cálculo extenso.