Eccoci qua per l'aggiornamento

Diamo prima i giusti meriti.
L'idea di tuxino era ottima!
A fronte di un aumento di soli 40byte nella dimensione dello sketch... si guadagnavano quasi 100byte di ram!
Difficile fare di meglio

Eppure... lesto parrebbe avercela fatta

Rimaneggiando un po' il suo codice, la FREERAM aumenta di ben 140(!!) e le dimensioni dello sketch
diminuiscono di ben 2k!!
Il codice, che sto testando ora è questo:
/*----- Pachube -----*/
// PACHUBE OTTIMIZZATO LESTO
ContentLenghtPachubeVAR = 0;
ContentLenghtFloat(mydata.toutES);
ContentLenghtFloat(mydata.houtES);
ContentLenghtFloat(mydata.tinES);
ContentLenghtFloat(mydata.hinES);
ContentLenghtFloat(mydata.T1ES);
ContentLenghtFloat(mydata.T2ES);
ContentLenghtUnsLong(mydata.mediaHzES);
Serial.print(F("ContentLenghtPachubeVAR: "));
Serial.println(ContentLenghtPachubeVAR);
e poi queste due funzioni fuori dal loop:
/*--------- Calcolo ContentLenght Float ---------*/
void ContentLenghtFloat (float contenitoreFloat) {
ContentLenghtPachubeVAR+=1; // aggiungo il punto decimale
int operatoreVoidPachube = contenitoreFloat * 10; // trasformo la float in un numero intero. 23.4 diventa 234 considerando un solo decimale
if ( contenitoreFloat == 0 ){ // se la temperatura è 0
ContentLenghtPachubeVAR+=2; // bisogna dimensionare il content lenght per contenere 0.0
}
if (contenitoreFloat < 0) { // se la temperatura è negativa
ContentLenghtPachubeVAR+=1; // aggiungo il segno meno al calcolo del ContentLenght
while ( operatoreVoidPachube < 0 ) { // fin tanto che è < di 0
operatoreVoidPachube /= 10; // divido per dieci
ContentLenghtPachubeVAR+=1; // ed incremento il content lenght ad ogni divisione
}
}
else { // altrimenti la temperatura è positiva
while ( operatoreVoidPachube > 0 ) { // fin tanto che è > di 0
operatoreVoidPachube /= 10; // divido per dieci
ContentLenghtPachubeVAR+=1; // ed incremento il content lenght ad ogni divisione
}
}
Serial.println(contenitoreFloat,1);
Serial.println (operatoreVoidPachube);
}
/*--------- Calcolo ContentLenght UnsignedLong ---------*/
void ContentLenghtUnsLong (unsigned long contenitoreLong) {
Serial.println(contenitoreLong);
if ( contenitoreLong == 0 ){
ContentLenghtPachubeVAR+=1; // se il valore è 0 bisogna dimensionare per contenere 0
}
while ( contenitoreLong > 0 ) {
contenitoreLong /= 10;
ContentLenghtPachubeVAR+=1;
}
Serial.println(contenitoreLong);
}
Le sto testando ora e sembra funzionino. Gestiscono i valori negativi ecc.
L'unico mio dubbio.
Se una float con un decimale è zero e faccio un print ottengo
0.0 ?
Oppure semplicemente 0?