Ciao Guglielmo, ti devo dire che non ho utilizzato nessuna variabile String(), solo array di char.
Questa volta per preparare una stringa Json contenente delle variabili float ho utilizzato la funzione dtostrf() che non avevo mai utilizzato, dovendo utilizzare tutti quei piccoli array str1, str2, ...
Forse dovrei mettere i dati numerici localmente nelle varie function che li creano e globalmente le stringhe di char che poi unisco nella function CreaJson() in questo modo i piccoli array str1, str2, ... vengono creati e cancellati all'interno di ogni funzione.
void CreaJson() {
uint8_t LenNew = 0;
char str1[10]{}, str2[10]{}, str3[10]{}, str4[10]{}, str5[10]{}, str6[10]{}, str7[10]{}, str8[10]{}, str9[10]{};
char LocTrasm[MaxDati] = { 0 };
char DataStrut[] = "\"RSI\":%i,\"ID\":%u,\"N\":%u,\"BT\":%s,\"TA\":%s,\"TC2\":%s,\"UM\":%s,\"RS\":%s,\"PA\":%s,\"VEL\":%s,\"DIR\":%s,\"MP\":%s,\"CO\":%d}}";
sprintf(LocTrasm, DataStrut, RssiRilev, StruCli.CodCli, StruNodo.Nodino, dtostrf(BatteRilev, 4, 2, str1),
dtostrf(Temp3Rilev, 7, 2, str2), dtostrf(Temp2Rilev, 7, 2, str3), dtostrf(UmiRilev, 7, 2, str4),
dtostrf(IrragRilev, 7, 2, str5), dtostrf(PressRilev, 7, 2, str6), dtostrf(VeloRilev, 7, 2, str7),
dtostrf(DirezRilev, 7, 2, str8), dtostrf(PioggiaRilev, 7, 2, str9), CO2Rilev);
LenNew = strlen(LocTrasm);
Serial.print(LocTrasm);
Serial.println(LenNew);
int j = 0;
for (j = 0; j < MaxDati; j++) DatiTras[j] = '\0';
j = 0;
for (int i = 0; i < LenNew; i++) {
if (LocTrasm[i] != ' ') {
DatiTras[j++] = LocTrasm[i];
// Serial.println(i);
}
}
Serial.println(strlen(DatiTras));
delay(200);
}
Così com'è si blocca mentre la Serial.println(i) mi informa a che punto è senza neppure concludere il valore numerico.
Grazie a tutti