Ripeto, hai solo 2Kb di SRAM, stai usando MALE i puntatori e per quello che vorresti fare dovresti usare l'allocazione dinamica di stringhe (array di char e NON String object). Ma ha SOLO 2Kb di SRAM.
Quando fai questo:
char* Sensori::getAltitudeS()
{ char tmp[5];
return dtostrf(altitude, 2, 1, tmp);
}
Stai restituendo il char* restituito dalla dtostr() ovvero il puntatore a tmp, che essendo locale dopo la return viene distrutto.
Dovresti lasciare che le varie getxxx() ad esempio getTemperatureS() ritornino il valore numerico (non stringa).
Poi eventualmente fai una funzione che da quella frase lunga ma non con return ma modifica un parametro char[] passato dall'esterno, ovvero un buffer stampabile.