Pages: [1]   Go Down
Author Topic: dtostrf() hängt mir immer ein A an den String an  (Read 2116 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Leute,

habe folgendes Problem und hier einen Testsketch mal gebastelt.
Ich möchte einen FloatWert von einem Sensor formatieren auf zB genau 2 Nachkommastellen.
sprintf() ist ja für Floats nicht so geeignet und die dtostrf() wäre hier wohl die richtige.

Jedoch wird mir hier immer ein A an den Wert angehängt.
hier der Code.

Code:
String Command;
char StrBuffer [10];
float var = 12.65346367;     
Command = dtostrf(var,6,2,StrBuffer);
Serial.print(Command);


Ausgabe am Terminalfenster: 12.65A 

wo liegt eurer Meinung nach das Problem?

Habe ich die Function so richtig verstanden?
dtostrf(die zu formatierende variable float, hier die Gesamtstellen vor und nach dem Komma inkl Vorzeichen und Dezimalpunkt, stellen nach dem Komma, charBuffer )
charBuffer Größe = Gesamtstellen ( vorzeichen, stellen vor und nach dem Komma + Dezimalpunkt ) + 1 stelle zusätzliche?


danke schon mal für die Hilfe

lg

Dieter
Logged


Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Was passiert denn, wenn Du direkt den StrBuffer per Serial.println() ausgibst?
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

das A ist immer noch dran.
Bin gerade draufgekommen, dass nicht jeder Float den ich mit dtostrf formatiere ein A angehängt bekommt lol
Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21511
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hast Du die Seite http://arduino.cc/playground/Main/FloatToString bzw http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1205038401 schon gelesen?
Grüße Uwe
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 57
Posts: 3006
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Und was spricht gegen
Serial.print(var,2);
?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 30
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Dieter,

normalerweise dürfte das nicht passieren.
Ich hatte aber auch schon solche komischen Phänomene wo ich mit String's was rumprogrammiert hatte. Das passierte aber nicht immer. Ich vermute dass irgend was mit der Reservierung des Speichers für die "Command" Variable schief läuft bzw. da schon was drinn steht. Manchmal hilft es die String Variable mit irgend einem Wert direkt bei der Erstellung zu initialisieren, also am besten mit Leerzeichen.

Gruß

harding
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 57
Posts: 3006
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Deiner Konstruktion
Code:
String cppString;
char cstring[] = "  3.45\000xy";  // so sollte  das Ergebnis von dtostrf(val,6,2, target); aussehen: 7 der 10 byte definiert
cppString = cstring;
traue ich nicht über den Weg, aber ...

 ... ausnahmsweise ist der böse String wohl nicht schuld, da :

>>Was passiert denn, wenn Du direkt den StrBuffer per Serial.println() ausgibst?
>    das A ist immer noch dran.
( Du meinst sicher " ist schon dran " )
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

bei einer Ausgaben von Serial.println(StrBuffer) habe ich leider auch schon das A dran obwohl es nicht dranhängen soll :-)

Jedoch erfolgt in meiner Application die Ausgabe über die SoftwareSerial und da wird dieser String dann per SMS auf mein Handy geschickt. Dort finde ich dann kein A mehr dran. Parallel gebe ich für Debug Zwecke aber den selben String auch noch auf die HardwareSerial ( normale Serial.print ) aus.

Bei mir ist der String halt nur viel länger, hier im Forum ist er der Einfachheit halt eher "klein" gehalten worden.
In meiner App verarbeite ich dass hier:


hier weise ich den Var Werte nur für Testzwecke zu. Später kommen diese von Sensoren bzw werden intern errechnet
Code:
     String sms_msg=" ", msg_buffer;
      char StrBuffer [10];
      float wind = 12.65346367, wind30min = 7.5659890, wind1std = 5.345655, wind3std = 3.212039 ;
      float vmax30 = 34.746356, vmax60 = 77.73653;
      float temp = 27.655789, humidity = 67.454124;
      String richtung = "NNW", datum ="26.06.2012", uhrzeit = "07:13";
      sms_msg = "MFC:" + datum +" "+ uhrzeit +" Wind aktuell "+dtostrf(wind,0,2,StrBuffer)+"m/s aus "+ richtung + "[30min               "+dtostrf(wind30min,0,2,StrBuffer)+
                "m/s,1Std "+dtostrf(wind1std,0,2,StrBuffer)+"m/s,3Std "+dtostrf(wind3std,0,2,StrBuffer)+"m/s]vmax30min "+dtostrf(vmax30,0,2,StrBuffer)+"m/s vmax60min"+dtostrf(vmax60,0,2,StrBuffer)+
                "m/s;T&F="+dtostrf(temp,0,2,StrBuffer)+"°C/"+dtostrf(humidity,0,2,StrBuffer)+"%";
Logged


Pages: [1]   Go Up
Jump to: