Bueno saque algunas funciones de un reloj binario y adapte un poco para hacer un ejemplo.No puedo probarlo ,los dos megas los tengo en impresoras 3d .Recuerda seleccionar el mega al compilar y verificar que la direccion I2C de tu ds3231 es la misma.Repito esta sin probar ,lo que deberia hacer es leer la hora cada segundo ,coger solo los minutos y activar los pines 22 al 25 correspondientes a la primera cifra en binario y idem con la segunda cifra en los pines 26 al 29 ,ademas de mostrar por serial el byte con las 2 cifras en binario:
// Librerias
#include <Wire.h>
//Constantes
#define RTC_DIR 0x68 // Direccion reloj DS3231
#define REFRESH 1000 // Cada segundo
//Variables globales
unsigned long lastTime; // Variable para comparar tiempo transcurrido.
//Estructuras
struct Date {
byte seconds;
byte minutes;
byte hour24;
byte dayOfWeek;
byte dayOfMonth;
byte month;
byte year;
};
// funciones
Date getDate(){ // Consulta la hora y fecha y devuelve una variable tipo Date.
Date date;
Wire.beginTransmission(RTC_DIR);
Wire.write(0); // Nos situamos en el primer registro
Wire.endTransmission();
Wire.requestFrom(RTC_DIR, 7); // Solicitamos los 7 bytes de informacion de la hora y fecha.
if (Wire.available()) {
date.seconds = (Wire.read()); // Lectura datos
date.minutes = (Wire.read());
date.hour24 = (Wire.read());
date.dayOfWeek = (Wire.read());
date.dayOfMonth = (Wire.read());
date.month = (Wire.read());
date.year = (Wire.read());
return date;
}
}
void setup() {
DDRA = B11111111; // Puerto A del mega como outputs ,va de los pines 22 a 29
Serial.begin(9600);
Wire.begin();
lastTime = millis();
// put your setup code here, to run once:
}
void loop() {
if(millis() - lastTime > REFRESH) {
Serial.println("Leyendo hora");
Date dateNow = getDate(); // Ejemplo con los minutos.Las entradas del 74141N con primera cifra a los pines 22,23,24 y 25
PORTA = dateNow.minutes; // El otro 74141N de la segunda cifra a los pines 27,27,28,29
Serial.println(PINA,BIN); // Estado de las salidas del puerto A.4 bits derecha la segunda cifra ,4 bits izquierda primera cifra.
lastTime = millis();
}
// put your main code here, to run repeatedly:
}