Reloj basado en Ds1302 y Max7219

Saludos;

Antes que nada, agradezco su tiempo en leer éste post.
Me dispongo a leer los datos del modulo DS1302 e imprimirlo en una matriz 8x8 controlada por MAX7219.

#include "LedControlMS.h"
#define NumMatrix 1  // Cuantas matrices vamos a usar
#include <DS1302.h>
// Inicializacion del modulo.
DS1302 rtc(2, 3, 5);
Time t;
LedControl lc=LedControl(12,11,10, NumMatrix);  // Creamos una instancia de LedControl

void setup()
   {
      for (int i=0; i< NumMatrix ; i++)
        {
           lc.shutdown(i,false);    // Activar las matrices
           lc.setIntensity(i,8);    // Poner el brillo a un valor intermedio
           lc.clearDisplay(i);      // Y borrar todo
        }
   }

void loop()
   {
    t = rtc.getTime();
        lc.writeString(0,t.date);
        delay(1000);
   }

Como era de esperarse no se imprimen correctamente los valores de, t.date.

¿Cual es el enfoque adecuado para resolver el problema ?

¿Por donde comenzar?

lc.writeString(0," "); Es una función donde 0 es el parámetro de la matriz (0 para una sola matriz, 1 para dos etc..) y el segundo parámetro es carácter a imprimir , parece ser un método de la librería ledControlMS.

Lo intuitivo seria imprimir los datos deseados por medio de un if

 if (t.date == 1) lc.writeString("1");
 if (t.hour == 1) lc.writeString("1");

con lo cuál es posible definir los días de la semana , hora, minutos etc..

Sin embargo el código resultante resulta engorroso y poco elegante.

Por ahora es un gran misterio como abordar el problema usando ésta librería para poder imprimir cualquier variable(serial read,analog/digital read etc..) y dada la indiferencia de los cráneos privilegiados hacia los post mundanos como éste, tardara un tiempo antes de poder hacer de éste post algo útil para la comunidad.

No hay duda que el conocimiento vale oro.

Después de una madrugada en vela , he podido encontrar una posible solución:

Sin embargo el código es imposible de ejecutar si solo lo copias y lo pegas( a pesar de tener todas las librerías en orden), así que intentaremos traducirlo poco a poco , realmente mis conocimientos en microcontroladores y programación orientada a objetos es muy limitada, por lo cual serán posteadOs si han compilada de manera correcta.

Las librerias:

En éste sketch vamos a omitir las librerias y funciones relacionadas con los sensores , debido a que no dispongo de ellos , :sweat_smile:

#include <stdio.h>
#include <DS1302.h> 
#include <Wire.h>                         
#include <LedControlMS.h>

<stdio.h> es usada para "invocar" a las funciones del lenguage de programación C, en cuanto <wire.h> es la librería que se utiliza para comunicar la placa arduino con dispositivos que trabajan mediante el protocolo I2C.

Por cuestiones de rendimiento, el autor decidió usar #define ;el cual permite al programador dar un nombre a un valor constante antes de compilar el programa
(no se modificará). Las constantes definidas en Arduino no ocupan ningún espacio de memoria
de programa en el chip.

  //Definimos los pines del modulo DS 1302   

#define CLOCKRSTPIN 8   //RST PIN          
#define CLOCKDATPIN 7   //DAT PIN                     
#define CLOCKCLKPIN 6    //CLK PIN          

// Definimos los pines del modulo max7219, sin embargo se modifico #define LCLOADPIN 10 para que encaje con el pin CS del Max7219 y sea más fácil de entender     
#define LCCSPIN 10                        
#define LCCLKPIN 11                      
#define LCDINPIN 12