Help with my Code MAX7219 Clock WIth DS3231

Hello i am trying to replicate a MAX7219 Clock using a 8x32 matrix with DS3231 but i am having strange outputs. It is not getting the right time, less 7 hours difference and the right day of the month which is Thursday today and it shows me Sunday, from my PC. I am a bit new to arduino. Could you help me locate the problem please. Many thanks.

#include <Time.h>
#include <TimeLib.h>

/*Arduino Clock by AnthoTRONICS

/CODE:/
// Header file includes
// These are for the matrix
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include “Font_Data.h”

//These are for the clock
#include <DS3231.h>
//#include <Wire.h>
DS3231 Clock;

bool Century=false;
bool h12;
bool PM;
byte dd,mm,yyy;
uint16_t h, m, s;

#define MAX_DEVICES 4 // Set the number of devices
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
// NOTE: These pin numbers will probably not work with your hardware and may
// need to be adapted
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10

// Hardware SPI connection
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

#define SPEED_TIME 75 // speed of the transition
#define PAUSE_TIME 0

#define MAX_MESG 20

// Global variables
char szTime[9]; // mm:ss\0
char szMesg[MAX_MESG+1] = “”;

uint8_t degC = { 6, 3, 3, 56, 68, 68, 68 }; // Deg C
uint8_t degF = { 6, 3, 3, 124, 20, 20, 4 }; // Deg F

char *mon2str(uint8_t mon, char *psz, uint8_t len)

// Get a label from PROGMEM into a char array
{
static const __FlashStringHelper* str =
{
F(“Jan”), F(“Feb”), F(“Mar”), F(“Apr”),
F(“May”), F(“Jun”), F(“Jul”), F(“Aug”),
F(“Sep”), F(“Oct”), F(“Nov”), F(“Dec”)
};

strncpy_P(psz, (const char PROGMEM *)str[mon-1], len);
psz[len] = ‘\0’;

return(psz);
}

char *dow2str(uint8_t code, char psy, uint8_t len)
{
static const __FlashStringHelper
str =
{
F(“Sunday”), F(“Monday”), F(“Tuesday”),
F(“Wednesday”), F(“Thursday”), F(“Friday”),
F(“Saturday”), F(“Sunday”)
};

strncpy_P(psy, (const char PROGMEM *)str[code-1], len);
psy[len] = ‘\0’;

return(psy);
}
// Time Setup: Code for reading clock time
void getTime(char *psz, bool f = true)
{
s = Clock.getSecond();
m = Clock.getMinute();
h =Clock.getHour(h12,PM);//24HR Format
sprintf(psz, “%02d%c%02d”, h, (f ? ‘:’ : ’ '), m);
//12hr Format
//uncomment if you want the clock to be in 12hr Format
/if (Clock.getHour(h12,PM)>=13 || Clock.getHour(h12,PM)==0)
{
h = Clock.getHour(h12,PM) - 12;
}
else
{
h = Clock.getHour(h12,PM);
}
/

}

void getDate(char *psz)
// Date Setup: Code for reading clock date
{
char szBuf[10];

dd=Clock.getDate();
mm=Clock.getMonth(Century); //12
yyy=Clock.getYear();
sprintf(psz, “%d %s %04d”,dd , mon2str(mm, szBuf, sizeof(szBuf)-1),(yyy + 2000));
//strcpy(szMesg, “29 Feb 2016”);
}

void setup(void)
{
P.begin(2);
P.setInvert(false); //we don’t want to invert anything so it is set to false
Wire.begin();

P.setZone(0, MAX_DEVICES-4, MAX_DEVICES-1);

P.setZone(1, MAX_DEVICES-4, MAX_DEVICES-1);
P.displayZoneText(1, szTime, PA_CENTER, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_NO_EFFECT);

P.displayZoneText(0, szMesg, PA_CENTER, SPEED_TIME, 0,PA_PRINT , PA_NO_EFFECT);

P.addChar(’$’, degC);
P.addChar(’&’, degF);

}

void loop(void)
{
static uint32_t lastTime = 0; // millis() memory
static uint8_t display = 0; // current display mode
static bool flasher = false; // seconds passing flasher

P.displayAnimate();

if (P.getZoneStatus(0))
{
switch (display)
{
case 0: // Temperature deg C
P.setPause(0,1000);
P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_UP);
display++;
dtostrf(Clock.getTemperature(), 3, 1, szMesg);
strcat(szMesg, “$”);
//strcat(szMesg, “26.5$”);

break;

case 1: // Temperature deg F
P.setTextEffect(0, PA_SCROLL_UP, PA_SCROLL_LEFT);
display++;
dtostrf((1.8 *Clock.getTemperature() )+32, 3, 1, szMesg);
strcat(szMesg, “&”);

// strcpy(szMesg, “71.6&”);

break;

case 2: // Clock

P.setFont(0, numeric7Seg);
P.setTextEffect(0, PA_PRINT, PA_NO_EFFECT);
//Sleep Mode
//Uncomment to enable Sleep Mode and adjust the hours to your needs
/if (h==12 || h<8 )//Time intervals (in this case, from 12AM to 8AM)
{
P.setIntensity(0); //Set display brightness to lowest setting
}
else
{
P.setIntensity(6); //Set display brightness to 6 (15 is the brighest)
}
/
P.setPause(0,0);

if (millis() - lastTime >= 1000)
{
lastTime = millis();
getTime(szMesg, flasher);
flasher = !flasher;
}
if(s==00&& s<=30){
display++;
P.setTextEffect(0, PA_PRINT, PA_WIPE_CURSOR);
}
// strcpy(szMesg, “36 % RH”);

break;

case 3: // day of week

P.setFont(0,nullptr);
P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
display++;
dow2str(Clock.getDoW()+1, szMesg, MAX_MESG); // Added +1 to get correct DoW

//dow2str(5, szMesg, MAX_MESG);
break;
default: // Calendar

P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
display = 0;
getDate(szMesg);
break;
}

P.displayReset(0); //rest zone zero

}

}///////end of loop

Did you set the correct time and date on the DS3231?

Also - before replying - go back and edit your original post and use ‘code tags’ around the program code in that post. Highlight the code and click on the </> icon.

Don

OK, start up by going and reading the forum instructions so that you can go back and modify your original post (not re-post it) - using the “More → Modify” option below the right hand corner of your post - to mark up your code as such using the “</>” icon in the posting window. Just highlight each section of code (or output) from the IDE and click the icon. In fact, the IDE has a “copy for forum” link to put these markings on a highlighted block for you so you then just paste it here in a posting window.

It is inappropriate to attach it as a “.ino” file. People can usually see the mistakes directly and do not want to have to actually load it in their own IDE. And that would also assume they are using a PC and have the IDE running on that PC.

But don’t forget to use the “Auto-Format” (Ctrl-T) option first to make it easy to read. If you do not post it as “code”, it can be quite garbled and is always more difficult to read.

Also tidy up your blank space. Use blank lines only between functional blocks.