Ho usato snprintf :) & :(

Rieccomi! :slight_smile:

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! :frowning:
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);
}

Infatti nel tuo caso non ha senso usare printf(). Come ho detto altrove, printf() è una funzione pesante, con un grande impatto sulla flash e sulla RAM.

Su Arduino io consiglio sempre la libreria PString, ma nel tuo caso lascerei semplicemente tutto com'era prima.

SukkoPera:
Infatti nel tuo caso non ha senso usare printf(). Come ho detto altrove, printf() è una funzione pesante, con un grande impatto sulla flash e sulla RAM..

Solo sulla flash, sulla ram l'impatto è minimo, giusto le dimensioni del buffer su cui vanno scritti i dati, dato che la sprintf è una funzione che fa molte cose è normale che va ad impegnare una discreta quantità di flash.

E' stato un bell'esercizio.
Grazie. :slight_smile: