Ho fatto questa funzioncina che converte l'ora (data da 3 numeri distinti, ora, minuti, secondi) in secondi:
unsigned long OraMinutiSecondiInSecondi (byte h, byte m, byte s) //Converte l'orario in secondi (da 0 a 86399 sec)
{
return h * 60 * 60 + m * 60 + s;
}
Concettualmente è giusta, ma in pratica mi da un risultato errato. Ho scoperto che il problema è causato dal calcolo che viene fatto tra data type differenti. Ho quindi modificato il codice in questo modo, ma mi chiedo se è corretto o meno:
unsigned long OraMinutiSecondiInSecondi (byte h, byte m, byte s) //Converte l'orario in secondi (da 0 a 86399 sec)
{
return (unsigned long)h * 60 * 60 + (unsigned long)m * 60 + (unsigned long)s;
}
Avrei potuto mettere direttamente gli unsigned long in questo modo, evitando di doverli convertire con il cast?:
unsigned long OraMinutiSecondiInSecondi (unsigned long h, unsigned long m, unsigned long s) //Converte l'orario in secondi (da 0 a 86399 sec)
{
return h * 60 * 60 + m * 60 + s;
}
Funzionano entrambe, ma qual'è la soluzione migliore? Tra le 2 direi la prima perchè così si evita di dover dichiarare delle variabili che occupano più memoria, ma anche la prima non so se è corretto fare così o se ci sono altre soluzioni.