NanoEsp, DHT22 und LCD I2C Display: Feuchtigkeitswert wird als NAN dargestellt

Hallo
ich habe ein NanoESP mit einem DHT und einem LCD Display 16x2 I2C verbunden. Soweit funktioniert das ganz hardwaremässig auch. Allerdings wird unter gewissen Umständen der Feuchtigkeitswert als NAN (not a number) im LCD dargestellt (siehe unten). Mein Sketch sieht wie folgt aus:

/*
 * Libraries
 */
#include <DHT.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define DHTTYPE DHT22

const int DHTPIN = 4;

double v;
char value[10];
String temperature;
String humidity;

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  Serial.begin(19200);
  dht.begin();
  lcd.begin();
  lcd.backlight();
}

void loop()
{
  v = dht.readTemperature();
  dtostrf(v, 10, 1, value);
  temperature = value;
  Serial.print("Raumtemperatur:            ");
  Serial.print(temperature);
  Serial.println(" °C");

  v = dht.readHumidity();
  Serial.println(String(v));
  dtostrf(v, 10, 1, value);
  humidity = value;
  Serial.print("Relative Luftfeuchtigkeit: ");
  Serial.print(humidity);
  Serial.println(" %");

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("RT:");
  lcd.print(temperature);
  lcd.print(" ");
  lcd.print((char)223);
  lcd.print("C");
  lcd.setCursor(0,1);
  lcd.print("RH:");
  lcd.print(humidity);
  lcd.print(" %");

  delay(2000);
}

Man beachte folgendes: Wenn ich die Zeile nach v = dht.readHumidity();, also Serial.println(String(v)); auskommentiere, dann erhalte ich auf dem Display folgende Zeilen:

RT:      26.2 *C
RH:      NAN %

Wenn ich die Zeile aktiviere, dann erhalte ich im Display (korrekt):

RT:      26.2 *C
RH:      44.5 %

Kann mir jemand erklären, warum ein simples fehlendes Serial.println mir den Wert für humidity verhunzt?

Ich bin dankbar für jeden Hinweis!

Vielen Dank

Christian

Weil
char value[10]; mach das char value[11];
float v; anstatt double

Uns verzichte auf String Objekte, auch wenn es ein ESP8266 ist

Hallo,

ElEspanol:
Uns verzichte auf String Objekte, auch wenn es ein ESP8266 ist

macht doch kein Mantra daraus...
Auf den ESPs die Stringklasse in diesem Umfang und mehr zu nutzen ist unproblematisch, auch im Dauerbetrieb.
Selbst die float Ausgabe würde ich hier mit der String Klasse machen.

Gruß aus Berlin
Michael

amithlon:
macht doch kein Mantra daraus...
Auf den ESPs die Stringklasse ....

Ich schließe mich an!

Das ist halt so, weil es schon immer so war!

Genau wie immer nur Ajax, statt sich mal die Fetch Api anzuschauen!

Gruß Fips