Rieccomi! ![]()
Poco fa ho usato snprintf nel mio contatore Geiger. Ha funzionato subito, senza alcun problema. Volendo fare un confronto, però, mi ero annotato l'occupazione di memoria:
l'IDE 1.8.5 prima diceva 30836 byte (95%) di programma e adesso 31822 (98%);
1457byte (71%) di memoria dinamica e adesso 1467 (71%).
Occupa di più?... Se lo modifico anche in un'altra parte di programma, supero i 32KB! ![]()
Questa è la parte modificata:
----- PRIMA: -----
String oref;
String minutif; // ore, minuti e secondi formattati a due cifre con spazio iniziale per valori<10.
String secondif;
void visualSecondi(long S)
{
if(S<0) S=0;
ore=int(S/3600); if(ore>9) oref=String(ore); else oref=" "+String(ore);
minuti=int((S%3600)/60); if(minuti>9) minutif=String(minuti); else minutif=" "+String(minuti);
secondi=(S%3600)%60;
if(secondi>9) secondif=String(secondi); else secondif=" "+String(secondi);
if (S<60) lcd.print(" "+secondif+"s");
else if (S<3600) lcd.print(minutif+"m"+secondif+"s");
else lcd.print(oref+"h"+minutif+"m");
}
----- ADESSO: -----
#include <stdio.h>
char stringa[]="12m34s"; // 6+1=7.
void visualSecondi(long S)
{
if(S<0) S=0;
ore=int(S/3600);
minuti=int((S%3600)/60);
secondi=(S%3600)%60;
if(S<60) snprintf(stringa, 7, " %2ds", secondi);
else if (S<3600) snprintf(stringa, 7, "%2dm%2ds", minuti, secondi);
else snprintf(stringa, 7, "%2dh%2dm", ore, minuti);
lcd.print(stringa);
}