I want to use the following function to display MCU's uptime, but after several hours I get error.
void uptime(char *ret_clk)
{
byte days = 0;
byte hours = 0;
byte minutes = 0;
byte seconds = 0;
int sec2minutes = 60;
int sec2hours = (sec2minutes * 60);
int sec2days = (sec2hours * 24);
unsigned long time_delta = millis() / 1000UL;
days = (int)(time_delta / sec2days);
hours = (int)((time_delta - days * sec2days) / sec2hours);
minutes = (int)((time_delta - days * sec2days - hours * sec2hours) / sec2minutes);
seconds = (int)(time_delta - days * sec2days - hours * sec2hours - minutes * sec2minutes);
sprintf(ret_clk, "%01dd %02d:%02d:%02d", days, hours, minutes, seconds);
}
after 2:55 hours I got a correct answer : 0d 02:55:27
also after 4 hours, a correct answer : 0d 04:06:44
but roughly after 12 hours i get an error: 1d 02:01:27
and after roughly 20 hours I get : 2d 23:74:26
What is wrong in uptime ?