The code is too simple for memory writing I believe. Please have a look below. I'm going to add a second 100uF capacitator today.
Thanks for any ideas!
#include <LedControl.h>
#include <Wire.h>
#include <DS1307.h>
int buttonMinUpdate = 0, buttonHourUpdate = 0;
char dateTime[22];
int minuteNow, minuteOld = 0;
int RTCValues[7], i = 0, year, month, dayOfMonth, dayOfWeek, hour, minute, second, intStatus = 1, oldStatus = 1;
const int buttonPinMinute = 3, buttonPinHour = 4, buttonShutdown = 5;
// inputs: DIN pin, CLK pin, LOAD pin. number of chips
LedControl mydisplay = LedControl(9, 10, 11, 2);
void setup()
{
//setTime();
DS1307.begin();
pinMode(buttonPinMinute, INPUT);
pinMode(buttonPinHour, INPUT);
pinMode(buttonShutdown, INPUT);
intStatus = digitalRead(buttonShutdown);
if(intStatus == 0)
{
mydisplay.shutdown(0, false); // turns on display
mydisplay.shutdown(1, false); // turns on display
}
else
{
mydisplay.shutdown(0, true); // turns on display
mydisplay.shutdown(1, true); // turns on display
}
oldStatus = intStatus;
mydisplay.setIntensity(0, 15); // 15 = brightest
mydisplay.setIntensity(1, 15); // 15 = brightest
}
void loop()
{
DS1307.getDate(RTCValues);
buttonMinUpdate = digitalRead(buttonPinMinute);
buttonHourUpdate = digitalRead(buttonPinHour);
sprintf(dateTime, "20%02d-%02d-%02d %02d:%02d:%02d", RTCValues[0], RTCValues[1], RTCValues[2], RTCValues[4], RTCValues[5], RTCValues[6]);
minuteNow = RTCValues[5];
intStatus = digitalRead(buttonShutdown);
if(oldStatus != intStatus)
{
oldStatus = intStatus;
if(intStatus == 0)
{
mydisplay.shutdown(0, false); // turns on display
mydisplay.shutdown(1, false); // turns on display
}
else
{
mydisplay.shutdown(0, true); // turns on display
mydisplay.shutdown(1, true); // turns on display
}
}
if(buttonMinUpdate == 0)
{
updateTimeMin();
}
if(buttonHourUpdate == 0)
{
updateTimeHour();
}
if(minuteNow != minuteOld)
{
minuteOld = minuteNow;
VisualizeTime();
}
delay(750);
}
void VisualizeTime()
{
mydisplay.clearDisplay(0);
mydisplay.clearDisplay(1);
enableHetIs();
int intMinutes = RTCValues[5];
int intExtraMin = intMinutes % 5;
enableMinutes(intExtraMin);
int intFunction = RTCValues[5] / 5;
int intHour = RTCValues[4];
if(intFunction >= 4)
{
intHour++;
}
enableFunction(intFunction);
enableHour(intHour);
}
void enableHour(int intHour)
{
while(intHour >= 12)
{
if(intHour >= 12)
{
intHour -= 12;
}
}
switch (intHour)
{
case 0:
mydisplay.setLed(0, 0, 6, true);
mydisplay.setLed(0, 1, 6, true);
mydisplay.setLed(0, 2, 6, true);
mydisplay.setLed(0, 3, 6, true);
mydisplay.setLed(0, 4, 6, true);
mydisplay.setLed(0, 5, 6, true);
break;
case 1:
mydisplay.setLed(1, 4, 5, true);
mydisplay.setLed(1, 5, 5, true);
mydisplay.setLed(1, 6, 5, true);
break;
}
}
void enableHetIs()
{
mydisplay.setLed(1, 4, 0, true);
mydisplay.setLed(1, 5, 0, true);
mydisplay.setLed(1, 6, 0, true);
mydisplay.setLed(0, 6, 0, true);
mydisplay.setLed(0, 5, 0, true);
}
void enableMinutes(int intExtraMin)
{
//there is no break in thise case intentionally
switch (intExtraMin)
{
case 4:
mydisplay.setLed(1, 2, 4, true);
case 3:
mydisplay.setLed(1, 2, 3, true);
case 2:
mydisplay.setLed(1, 3, 4, true);
case 1:
mydisplay.setLed(1, 3, 3, true);
break;
}
}
void enableFunction(int intFunction)
{
switch (intFunction)
{
case 0:
enableUur();
break;
case 1:
enableVijf();
enableOver();
break;
}
}
void enableUur()
{
mydisplay.setLed(1, 1, 5, true);
mydisplay.setLed(1, 1, 6, true);
mydisplay.setLed(1, 1, 7, true);
}
void enableVijf()
{
mydisplay.setLed(0, 0, 0, true);
mydisplay.setLed(0, 1, 0, true);
mydisplay.setLed(0, 2, 0, true);
mydisplay.setLed(0, 3, 0, true);
}
void enableOver()
{
mydisplay.setLed(0, 0, 0, true);
mydisplay.setLed(0, 1, 0, true);
mydisplay.setLed(0, 2, 0, true);
mydisplay.setLed(0, 3, 0, true);
}
void updateTimeMin()
{
minute = RTCValues[5] + 1;
if(minute == 60)
{
minute = 0;
}
hour = RTCValues[4];
completeUpdate();
}
void updateTimeHour()
{
minute = RTCValues[5];
hour = RTCValues[4] + 1;
if(hour == 24)
{
hour = 0;
}
completeUpdate();
}
void completeUpdate()
{
second = 0;
dayOfMonth = RTCValues[2] ;
dayOfWeek = RTCValues[3] ;
year = RTCValues[0];
month = RTCValues[1];
DS1307.setDate(year, month, dayOfMonth, dayOfWeek, hour, minute, second);
DS1307.getDate(RTCValues);
VisualizeTime();
}