433Mhz Daten Übertragung - Zeichenkette verändern

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 :blush: