I know that there is a time.h library but I never ever use it before, and I don't know if is useful in this case.
Instead of that I did a kind of RTCtimer emulator with just arduino and a LCD display 7seg 4dig.
be aware: the code is form a debugging session and may content some missing parts, please double check.
// display 4 digit 7 segments
int Digit1 = A0;
int Digit2 = A1;
int Digit3 = A2;
int Digit4 = 5;
int SegmentA = 6;
int SegmentB = 7;
int SegmentC = 8;
int SegmentD = 9;
int SegmentE = 10;
int SegmentF = 11;
int SegmentG = 12;
int SegmentDP = 13;
byte H = 0;
byte h = 5;
byte M = 2;
byte m = 2;
int ms = 0;
byte s = 0;
unsigned long mills;
unsigned long old_mills;
byte del = 1;
int calib = 235;
//235 se adelanta unos milisegundos
//236 se atraza unos milisegundos
// cambiar el "del" aumenta o disminuye mucho la velocidad
void setup() {
// put your setup code here, to run once:
pinMode(Digit1, OUTPUT);
pinMode(Digit2, OUTPUT);
pinMode(Digit3, OUTPUT);
pinMode(Digit4, OUTPUT);
pinMode(SegmentA, OUTPUT);
pinMode(SegmentB, OUTPUT);
pinMode(SegmentC, OUTPUT);
pinMode(SegmentD, OUTPUT);
pinMode(SegmentE, OUTPUT);
pinMode(SegmentF, OUTPUT);
pinMode(SegmentG, OUTPUT);
pinMode(SegmentDP, OUTPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
ms = ms + 1;
if (ms >= calib){
ms = 0;
s= s + 1;
}
if (s >= 60){
s = 0;
m = m + 1;
}
if (s%2){
digitalWrite(SegmentDP,LOW);
}
else{
digitalWrite(SegmentDP,HIGH);
}
if (m >= 10){
m = 0;
M = M + 1;
}
if (M >=6){
M = 0;
h++;
}
if ( h >= 10){
h = 0;
H = H + 1;
}
if (H >= 10){
H = 0;
}
if ((H==1) && (h==3)){
H=0;
h=1;
}
numero(m);
digitalWrite(Digit1,HIGH);
delay(del);
digitalWrite(Digit1,LOW);
numero(M);
digitalWrite(Digit2,HIGH);
delay(del);
digitalWrite(Digit2,LOW);
numero(h);
digitalWrite(Digit3,HIGH);
delay(del);
digitalWrite(Digit3,LOW);
numero(H);
digitalWrite(Digit4,HIGH);
delay(del);
digitalWrite(Digit4,LOW);
//ultimo ajuste
delayMicroseconds(10);
}
// numeros
void numero(int i) //dibuja el numero especificado antes se debe encender el digito
{
switch (i){
case 1:
digitalWrite(SegmentA, HIGH);
digitalWrite(SegmentB, LOW);
digitalWrite(SegmentC, LOW);
digitalWrite(SegmentD, HIGH);
digitalWrite(SegmentE, HIGH);
digitalWrite(SegmentF, HIGH);
digitalWrite(SegmentG, HIGH);
break;
case 2:
digitalWrite(SegmentA, LOW);
digitalWrite(SegmentB, LOW);
digitalWrite(SegmentC, HIGH);
digitalWrite(SegmentD, LOW);
digitalWrite(SegmentE, LOW);
digitalWrite(SegmentF, HIGH);
digitalWrite(SegmentG, LOW);
break;
case 3:
digitalWrite(SegmentA, LOW);
digitalWrite(SegmentB, LOW);
digitalWrite(SegmentC, LOW);
digitalWrite(SegmentD, LOW);
digitalWrite(SegmentE, HIGH);
digitalWrite(SegmentF, HIGH);
digitalWrite(SegmentG, LOW);
break;
case 4:
digitalWrite(SegmentA, HIGH);
digitalWrite(SegmentB, LOW);
digitalWrite(SegmentC, LOW);
digitalWrite(SegmentD, HIGH);
digitalWrite(SegmentE, HIGH);
digitalWrite(SegmentF, LOW);
digitalWrite(SegmentG, LOW);
break;
case 5:
digitalWrite(SegmentA, LOW);
digitalWrite(SegmentB, HIGH);
digitalWrite(SegmentC, LOW);
digitalWrite(SegmentD, LOW);
digitalWrite(SegmentE, HIGH);
digitalWrite(SegmentF, LOW);
digitalWrite(SegmentG, LOW);
break;
case 6:
digitalWrite(SegmentA, LOW);
digitalWrite(SegmentB, HIGH);
digitalWrite(SegmentC, LOW);
digitalWrite(SegmentD, LOW);
digitalWrite(SegmentE, LOW);
digitalWrite(SegmentF, LOW);
digitalWrite(SegmentG, LOW);
break;
case 7:
digitalWrite(SegmentA, LOW);
digitalWrite(SegmentB, LOW);
digitalWrite(SegmentC, LOW);
digitalWrite(SegmentD, HIGH);
digitalWrite(SegmentE, HIGH);
digitalWrite(SegmentF, HIGH);
digitalWrite(SegmentG, HIGH);
break;
case 8:
digitalWrite(SegmentA, LOW);
digitalWrite(SegmentB, LOW);
digitalWrite(SegmentC, LOW);
digitalWrite(SegmentD, LOW);
digitalWrite(SegmentE, LOW);
digitalWrite(SegmentF, LOW);
digitalWrite(SegmentG, LOW);
break;
case 9:
digitalWrite(SegmentA, LOW);
digitalWrite(SegmentB, LOW);
digitalWrite(SegmentC, LOW);
digitalWrite(SegmentD, LOW);
digitalWrite(SegmentE, HIGH);
digitalWrite(SegmentF, LOW);
digitalWrite(SegmentG, LOW);
break;
case 0:
digitalWrite(SegmentA, LOW);
digitalWrite(SegmentB, LOW);
digitalWrite(SegmentC, LOW);
digitalWrite(SegmentD, LOW);
digitalWrite(SegmentE, LOW);
digitalWrite(SegmentF, LOW);
digitalWrite(SegmentG, HIGH);
break;
}
}
this is the link of that topic:
http://forum.arduino.cc/index.php?topic=174496.msg1295737#msg1295737
seems to be precise but is not, don't remember how many time is defaced but it can be adjust with delay() and microdelay()
LOL in that tread I post that I was using a RTC module but is only mounted in the bread board, noting to do with the code.
I suppose that I was starting with the (7,4) lcd