Code stadt es ist warm oder es ist kalt in temperatur ausgeben lassen wie?

Das ist mein Code und ich will in Temperatur ausgeben lassen mit dem DHT22 aber wie:

int sensorPin = A5;
float temperatur;

void setup() {
Serial.begin(9600);
}

void loop() {
temperatur = analogRead(sensorPin); // Sensor auslesen

if (temperatur > 19) {
Serial.println("es ist Warm");
} else {
Serial.println("es ist kalt");
}

delay(60000);
}

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Der Fehler liegt hier:

temperatur = analogRead(sensorPin);

Der DHT22 ist kein analoger Sensor, sondern arbeitet digital.
analogRead() kann nur Spannungen (0–1023) lesen und liefert keine Temperaturwerte.

Zusätzlich:

  • Der DHT22 gehört an einen digitalen Pin (z. B. D2), nicht an A5
  • Der Wert 19 hat bei analogRead() keine Bedeutung als °C

Für den DHT22 brauchst du:

  • einen digitalen Pin
  • eine DHT-Library (z. B. von Adafruit)
  • dht.readTemperature() zum Auslesen der Temperatur

Kurz gesagt:
DHT22 ≠ analogRead() – deshalb funktioniert der Code so nicht.

Der DHT-Sensor wird anders ausgelesen.
Der kann auch die Luftfeuchte...

Eine kleine Anleitung. Beachte, dass die Bilder etwas anders bei Dir aussehen können, wichtig ist den Text zu lesen.

Du gehst auf SKETCH - BIBILOTHEK EINBINDEN - BIBLIOTHEKEN VERWALTEN
Dann suchst Du nach dht22 und bekommst eine Liste, in der findest Du folgenden Eintrag:

Adafruit DHT22 auswählen, die Version 1.4.6. und dann auf installieren klicken.
Dann wartest Du einen kleinen Moment... und wenn die Installation durch ist, nimmst Du diesen Code und schreibst ihn in Deinen Controller:

#include "DHT.h"

const byte DHTPIN = A5;
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
float h;
float t;

void setup()
{
  Serial.begin(115200);
  delay(300);
  Serial.println(F("\r\nStart...\r\n"));
  dht.begin();
  delay(200);
}

void loop()

{
  newTime(1000);
}

void newTime(const uint32_t intervall)
{
  static uint32_t lastmillis = 0;

  if (millis() - lastmillis >= intervall)
  {
    readDht();
    lastmillis += intervall;
  }
}

void readDht()
{
  h = dht.readHumidity();
  t = dht.readTemperature();

  if (isnan(h) || isnan(t))
  {
    Serial.println(F("Failed to read from DHT sensor!"));
  }
  else
  {
    Serial.print(F("Temperatur: "));
    Serial.print(t);
    Serial.print(" °C  # Humidy: ");
    Serial.print(h);
    Serial.print(" %");
  }
}

Falsch auch bei Uno R3, Nano R3, MEGA2560 kann man A5 als Digital Pin nutzen und mit digitalRead( ) auslesen.
Bei Nano R3 dagegen sind A6,A7 reine Analog Pins.

.

analogRead() gibt einen Wert, basierend auf der eingestellten Referenz zuück.

Auch A5 ist ein digitaler PIN.

Mensch braucht die Lib nicht, sie macht nur einiges einfacher und es erspart das Rad noch einmal neu zu erfinden.

Achtung. Hier wird die serielle Schnittstelle schneller betrieben wie in dem Beispiel im ersten Post. Du mußt die Geschwindigkeit im Terminal unten links auf die gleiche Geschwindigkeit ( 115200 ) stellen.

Grüße Uwe

Ist das nicht unten rechts ?

Okay, danke für die Erklärung :sweat_smile:

Ja.
aber Hauptsache "unten" ist richtig.
...
manchmal hab ich einfach 2 linke Hände. :wink:

Grüße Uwe