Die Deklaration von "temp_string" sehe ich jetzt aber immer noch nirgends?
Ist das auch ein char-Array? Lang genug?
michael--g:
char tmp[10];
...
strcat(temp_string,(dtostrf(TEMP_SENSOR[0],3,2,tmp)));
Und bei diesem Zusammenstöpseln mit dtostrf(), ist da sichergestellt, dass in den TEMP_SENSOR-Daten wirklich nur zu 100% sicher überprüfte Temperaturwerte drinstehen? Sagen wir mal Werte zwischen -99.9 und 99.9?
Weil wenn da auch nur einmal irgendein Quatsch drinsteht mit einer zu grossen Zahl, dann formatiert Dir dtostrf() gnadenlos über das Ende des char-Arrays hinaus einen Buffer-Overflow. Denn dtostrf() nimmt sich die Länge, die es braucht.
Ein Aufruf mit
float f;
char tmp[10];
f=12345678901234567890.123;
Serial.println(dtostrf(f,3,2,tmp));
delay(4000);
liefert einen schönen Quatsch auf dem Bildschirm.
Und mit der Deklaration "char tmp[25];" wird es immerhin ein 23 Zeichen langer String, der ausgegeben wird.
Wenn es nicht sicher ist, dass nur gültige Temperaturwerte formatiert werden, sondern ggf. eine Variable auch mal Datenmüll enthalten kann, dann würden Deine Formatierungen nur mit zusätzlichen Prüfungen einen Pufferüberlauf zur Laufzeit des Programms verhindern:
if ((TEMP_SENSOR[0]>-100.0)&&(TEMP_SENSOR[0]<100.0))
dtostrf(TEMP_SENSOR[0],3,2,tmp);
else
strcpy(tmp,"***");
Wenn Du überall im Programm einen so leichtsinnigen Programmierstil pflegst, mit der Möglichkeit eines potentiellen Buffer-Overflows bei Funktionsaufrufen, und Du andererseits dann irgendwo an anderer Stelle im Programm vergisst, diese Variablen entsprechend auf ihren Gültigkeitsbereich zu prüfen, die woanders durch die leichtsinnige Programmierung zum Buffer-Overflow führen können, dann kann aus einem potentiellen Buffer-Overflow auch schnell mal ein tatsächlicher Buffer-Overflow werden. Mit entsprechender Fehlfunktion im weiteren Programmverlauf, weil falsche Variablenbereiche überschrieben wurden.