Pages: [1]   Go Down
Author Topic: float und int zu String Variable?  (Read 1006 times)
0 Members and 1 Guest are viewing this topic.
Munich
Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo, kann mir jemand sagen wie ich den Wert aus einer float Variable und einer int Variable in eine String-Variable zusammensetzen kann?

Danke
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2983
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Es ist hart für einen WebApps-Programmierer, aber String ist nichts für einen Arduino.

Den knappen RAM hast du mit char text[MAXSIZE]; besser im Griff;

Wenn du den Text nicht an ein Objekt übergibst, das print unterstützt { Serial.print(myfloat); Serial.print(" - "); Serial.println(myInt); } 
dann ist dtostrf und itoa , was du suchst.

Beide hängen eine binär 0 an den Text, die du (als poor man's concatenate) danach ausbügeln musst.

Code:
float myFloat=123.4567;
unsigned int myInt = 987;
//                      0123456789012345
static char buffer[] = "F: ###.## I: ###"; // 17 bytes sample text to overwrite

dtostrf(myFloat, 6, 2, &buffer[3]);
if (myInt < 1000)   // check if myInt fits !
   itoa(myInt,&buffer[13],10);   // 10 = decimal
buffer[9] = ' '; // concatenate both parts again
http://dereenigne.org/arduino/arduino-float-to-string
 
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 140
Posts: 2898
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo, kann mir jemand sagen wie ich den Wert aus einer float Variable und einer int Variable in eine String-Variable zusammensetzen kann?

In eine Stringvariable vom Typ "char-Array" oder in eine Stringvariable vom Typ "String-Objekt"?

Ich gehe mal vom Standard aus, also char-Array, da nützen Dir Funktionen aus der Standardbibliothek.

Integer in String:
itoa() ==> http://www.cplusplus.com/reference/cstdlib/itoa/

Float (unter Arduino ist "float" ein "double") in String:
dtostrf() ==> http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42

Allgemeine Formatierung mit gemischten Variablen:
sprintf() ==> http://www.cplusplus.com/reference/cstdio/sprintf/

Leider funktioniert die sprintf-Funktion unter Arduino NICHT mit float/double Fließkommazahlen. Man könnte sich behelfen, eine Fließkommazahl erst mit dtostrf in ein char-Array zu packen und danach noch mit sprintf als String auszugeben.

  double f=3.14159;
  int i=3;
  char fstr[10];
  char myOutput[40];
  dtostrf(f, 5, 2, fstr);
  sprintf(myOutput,"Pi ist %s, also gerundet %d",fstr,i);
  Serial.println(myOutput);

Im allgemeinen solltest Du aber prüfen, ob Dein Programm überhaupt Fließkommazahlen benötigt. Der Verzicht auf Fließkommazahlen hält das Programm klein, da Integer-Arithmetik weniger großen Code erfordert als Fließkomma-Arithmetik.

Beispiel: Du benötigst Temperaturen auf Hundertstel Grad genau, dann kannst Du definieren
float T=23.51;
Oder Du rechnest alle Temperaturen im Programm gleich als Integer in Hundertstel Grad und definierst:
int T=2351;

Sowas ließe sich bei Bedarf mit sprintf() wesentlich eleganter mit zwei Nachkommazahlen ausgeben als eine tatsächliche Fließkommazahl, die von Arduino bei der sprintf()-Funktion nicht unterstützt wird.





Logged

Pages: [1]   Go Up
Jump to: