Sicher das dein Beispiel auch in der Arduino IDE funktioniert ?
Serenifly:
void setup()
{
Serial.begin(9600);
float temp = 23.5;
int hum = 45;
char buffer[20];
itoa(temp * 100, buffer, 10);
int length = strlen(buffer);
buffer[length] = ',';
itoa(hum, &buffer[length + 1], 10);
Serial.println(buffer);
float t = atoi(strtok(buffer, ",")) / 100.0;
int h = atoi(strtok(NULL, ","));
Serial.println(t, 1);
Serial.println(h);
}
Ich habe es mit sprintf und itoa versucht, das funktioniert aber beides nicht.
Bis jetzt habe ich den Wert einfach nur simuliert mit
char temp[]="21";
Nun möchte ich aber einen echten Wert einlesen und diesen müsste ich dann in ein String umwandeln.
Ja, das ist getestet. Ein leeres loop() fehlt natürlich noch
Ausgabe:
2350,45
23.5
45
Ich weiß nicht ob du überhaupt Float Werte hast. printf() geht jedenfalls nicht mit Float und für float -> C String bräuchte man noch dtostrf(). Deshalb ist es einfacher da einfach * 10 oder *100 zu machen und das als Integer zu übertragen
printf() geht genauso, aber du brauchst s(n)printf() um in einen Puffer zu schreiben:
void setup()
{
Serial.begin(9600);
float temp = 23.5;
int hum = 45;
char buffer[20];
snprintf(buffer, sizeof(buffer), "%d,%d", (int)(temp * 10), hum);
Serial.println(buffer);
float t = atoi(strtok(buffer, ",")) / 10.0;
int h = atoi(strtok(NULL, ","));
Serial.println(t, 1);
Serial.println(h);
}
Ausgabe:
235,45
23.5
45
20 Bytes für den Puffer ist etwas übertrieben. 10 würde wohl auch reichen. Aber du musst bei der Puffer-Größe etwas mehr aufpassen als du es tust.
Ach das war der entscheidende Hinweis !
Ich habe das direkt ganz oben wo die declarationen sind rein geschrieben