BME 280 float -> string problem
|
24.02.2020, 15:21
(Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2020 23:06 von Bitklopfer.)
Beitrag #1
|
|||
|
|||
BME 280 float -> string problem
Hallo,
ich verzweifle an einem Problem bei der Umwandlung einer floatvariablen in einen String. Der Code stammt aus dem Netz, ich habe ihn modifiziert. U.a. werden aus einem BME 280 an einem ESP 8266 die Temperatur, Luftfeuchtigkeit und der Luftdruck asugelesen. Dazu sind vorher ensprechende float Variable definiert worden. Dieser werden auch korrekt eingelesen, was ich über den Serial Monitor nachvollziehen kann. Dann werden die Werte in Strings umgewandelt, was prinzipiell auch funktioniert, wird auch über den Serial Monitor richtig ausgegeben bis auf einen Wert: Die Floatvariable hu wird in den humidityString[7] umgewandelt: dtostrf (hu, 5, 2, humidityString); und sollte dann mit Serial.println(humidityString); im Monitor erscheinen. Das klappt bei der Temperatur und beim Luftdruck problemlos, bei der Luftfeuchtigkeit wird stattdessen nur eine einstellige Ganzzahl ausgegeben, während der Originalstring korrekt angezeigt wird: Das sieht im Monitor so aus (jeweils Parameter: Floatzahl / String): 15:18:36.116 -> BME280 /BH1750 /Bodenfeuchtesensor - test 15:18:46.266 -> Temperatur = 11.92 / 11.9 15:18:46.266 -> Luftfeuchtigkeit = 78.35 / 6 15:18:46.266 -> Luftdruck mBar = 998.06 / 998.06 15:18:46.266 -> Luftdruck mmHg = 748.65 / 749 15:18:46.266 -> Taupunkt = 7.59 / 8 15:18:46.266 -> Bodenfeuchte = 6.06 / 6 15:18:46.266 -> Helligkeit = 0.00 / 0 Was mache ich falsch? Oder habe ich da etwas grundlegendes nicht verstanden? (Hoffe, ich habe das alles richtig geschildert, bin Anfänger; evt. Fehler bitte ich nachzusehen... :-) Stephan ------------------------------------------------------------------------------ Hier der Code: Code: #include <Wire.h> |
|||
24.02.2020, 15:42
(Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2020 15:58 von Tommy56.)
Beitrag #2
|
|||
|
|||
RE: BME 280 float -> string problem
Stelle Deinen Sketch bitte in Codetags.
Wie das geht, steht hier. Ansonsten kann ich den Fehler nicht nachvollziehen: Code: void setup() { Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
24.02.2020, 16:12
Beitrag #3
|
|||
|
|||
RE: BME 280 float -> string problem
(24.02.2020 15:21)drstewa schrieb: #include <ESP8266WiFi.h> https://www.arduinoforum.de/arduino-Foru...-und-ESP32 Ist das Unterforum für den Esp.. echt so schwer zu finden? Gruß Fips Gruß Fips Meine Esp8266 & ESP32 Projekte |
|||
24.02.2020, 23:49
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2020 01:20 von Bernd666.)
Beitrag #4
|
|||
|
|||
RE: BME 280 float -> string problem
Moin drstewa,
blöder Fehler. Schau dir mal die Stringlängen von pressureString an. In meinem Beispiel kommt der Fehler auch. Du hast "char pressureString[7];" gesetzt und machst dann das "dtostrf(p, 8, 2, pressureString);". Code: void setup() 73 de Bernd |
|||
25.02.2020, 20:16
Beitrag #5
|
|||
|
|||
RE: BME 280 float -> string problem
Hallo Tommy, hallo Bernd,
ich sehe vielleicht den Wald vor lauter Bäumen nicht: Es geht um die Umwandlung von hu in humidityString. Die entscheidenden Zeilen sind: ... float hu; char humidityString[7]; ... hu = bme.readHumidity(); ... dtostrf (hu, 5, 2, humidityString); ... Serial.print(hu); Serial.print(" / "); Serial.println(humidityString); Führt zur Ausgabe: Luftfeuchtigkeit = 41.40 / .................................... Die Variable hu wird also korrekt ausgelesen und auch ausgegeben. Der String wird nicht ausgegeben, ist also offenbar leer. Verstehe ich das richtig: Ich definiere doch einen 7 Zeichen langen String. Dann wird die floatzahl xx.xx in den humidityString eingelesen und zwar 4 Stellen vor dem Dezimalpunkt und 2 dahinter. Richtig? Warum geht das hier nicht? Habe das auch mit anderen Einstellungen versucht: Eigentlich ist hu 5 Stellen lang mit Dezimalpunkt, der String ist dann 5 Stellen lang, bei der Umwandlung 3 (2 vor dem Komma, dann das Komma) und 2 nach dem Komme. Geht auch nicht... Ratlose Grüße und sorry für meine Anfängerfehler, die ich im Forum gemacht habe und noch mache ... Stephan |
|||
25.02.2020, 20:50
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2020 20:58 von Tommy56.)
Beitrag #6
|
|||
|
|||
RE: BME 280 float -> string problem
Code: float hu = 45.67; Sorry, aber ich kann Dein Problem nicht nachvollziehen. 5 Zeichen incl. '.' + '\0' = 6 Zeichen. 1 Zeichen Reserve, falls doch mal 100 %RH raus kommen sollte, ist ok. Die 5 ist die Gesamtlänge, auf die aufgefüllt wird. Wenn hu größer ist, wird auch das größere ausgegeben. Prüfe mal dp, ob das zu groß wird und überschreibt. Evtl. mal dpString einfach zum Testen auf [10] setzen. Ansonsten die Füllung aller anderen Zeichenketten auskommentieren und schrittweise wieder einkommntieren. Auf dem ESP kannst Du auch mit sprintf arbeiten, was auf den AVR für float nicht geht. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
25.02.2020, 22:26
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2020 22:35 von Bernd666.)
Beitrag #7
|
|||
|
|||
RE: BME 280 float -> string problem
Moin!
Ok, ich mach es mal deutlicher. Habe dafür den Code aus dem Originalsketch entnommen. Code: void setup() Nun die Ausgaben: Code: Mit dem Fehler: 73 de Bernd |
|||
25.02.2020, 22:28
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2020 22:32 von Tommy56.)
Beitrag #8
|
|||
|
|||
RE: BME 280 float -> string problem
Also der Druck war das Problem. Deshalb hatte ich ja geschrieben: Alle Umwandlungen auskommentieren und schrittweise wieder einkommentieren. Denn die Feuchte selbst konnte es nicht gewesen sein. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste