Se le cose semplici non ti piacciono... va bene così.
Anche il calcolo del tempo:
unsigned long t=milllis()/1000; // secondi totali trascorsi
byte secondi = t%60;
byte minuti = (t/60)%60;
byte ore = (t/3600)%24;
oppure, risparmiando una variabile unsigned long:
byte secondi = (t/1000)%60;
byte minuti = (t/60000)%60;
byte ore = (t/3600000)%24;
Tieni presente che, per essere ragionevolmente preciso (entro un minuto al mese), devi usare una scheda con il clock del microcontrollore generato da un vero quarzo, non da un risuonatore ceramico come quello montato in Arduino Uno (almeno in quello originale, ma anche nella maggior parte degli altri), eventualmente aggiungendo anche un compensatore per la taratura fine (se vuoi che stia entro pochi secondi al mese di errore).