Frage zu Programm mit 2 DHT22 Sensoren

Hallo,

ich möchte ein kleines Programm für eine Wetterstation schreiben und mich damit mit der Arduino Plattform vertraut machen, das auslesen eines einzelnen DHT22 klappt schon,. Beim Auslesen von 2 Sensoren bekomme ich aber nur die Messwerte von einem angezeigt. Das Programm habe ich aus dem Netz und etwas angepasst. Seht Ihr wo es hängen könnte?

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

// DHT_dual_test
// Demonstrates multiple sensors
// Modified sketch by DIY-SciB.org

#include <DHT.h>

#define DHT1PIN 4 // what pin we're connected to
#define DHT2PIN 5

// Uncomment whatever type you're using!
//#define DHT1TYPE DHT11 // DHT 11
#define DHT2TYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

DHT dht1(DHT1PIN, DHT2TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);

void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");

dht1.begin();
dht2.begin();
}

void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();
float h2 = dht2.readHumidity();
float t2 = dht2.readTemperature();

// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t1) || isnan(h1)) {
Serial.println("Failed to read from DHT #1");
} else {
Serial.print("Humidity 1: ");
Serial.print(h1);
Serial.print(" %\t");
Serial.print("Temperature 1: ");
Serial.print(t1);
Serial.println(" *C");
}
if (isnan(t2) || isnan(h2)) {
Serial.println("Failed to read from DHT #2");
} else {
Serial.print("Humidity 2: ");
Serial.print(h2);
Serial.print(" %\t");
Serial.print("Temperature 2: ");
Serial.print(t2);
Serial.println(" *C");
}
Serial.println();
}

Danke. MfG Jojo

Hoi,
Wie es schon im Kommentar des codes steht braucht der Sensor etwas Zeit.
Probier mal ein delay(250); nach jedem auslesen.
Ich benutze auch 2 davon, laufen problemlos

Hallo,

float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();
float h2 = dht2.readHumidity();
float t2 = dht2.readTemperature();

ich schieße hier mal in Blaue:

float h1 = dht1.readHumidity1();
float t1 = dht1.readTemperature1();
float h2 = dht2.readHumidity2();
float t2 = dht2.readTemperature2();

Gruß und Spaß
Andreas

Ich habe Eure Ratschläge mal umgesetzt, und hintere jedem float Befahl ein Delay von 2000 gesetzt und auch die veränderte Variablenbezeichnung (ging aber nicht brachte Fehlermeldung falsche oder unbekannte Klasse) siehe auch Screenshot vom Code und von der Ausgabe.

MfG Jojo

Hallo,

ich kenne die von Dir verwendete Bibliothek nicht, aber ich würde vermuten, dass dort irgendwo "der Hund begraben" ist.

Ich habe hier meinduino.de einen Sketch geschrieben, der den DHT-Sensor ohne die Verwendung einer Bibliothek ausliest. Den solltest Du eigentlich relativ einfach so anpassen können, dass er einen, zwei oder mehrere Sensoren liest. In initDHT() müsstest Du die verwendete Datenleitung angeben, desgleichen in readDHT() und readDHTDaten(), dann sollte das eigentlich laufen.

Vielleicht hilft Dir das ja weiter.

Gruß,
Ralf

Hallo,
das sieht hier aber etwas anders aus:
http://playground.arduino.cc/Main/DHTLib
Gruß und Glück
Andreas

#include <dht11.h>
// ################################################## DHT11-Sensor
// DHT11 Temp & Hum - Sensor on digital pin 2 und 3
dht11 DHT11;
dht11 DHT11B;
pinMode(2, INPUT); //DHT11 1 (DHT11)
pinMode(3, INPUT); //DHT11 2 (DHT11B)
void_setup()
{
CHECKDHT11();
}
void_loop()
{
// in Loop dann sowas wie dies hier....
  // 1. DHT11
    Serial.print("Humidity-1 (%)  : ");
    Serial.println((float)DHT11.humidity + 10, 2);
    delay(2250);
    // 2. DHT11  
    Serial.print("Humidity-2 (%)  : ");
    Serial.println(((float)DHT11B.humidity + 10)-5, 2); // +6, dann -3 ?
    delay(2250);
}
// DHT11
void CHECKDHT11()
{
int chk0 = DHT11.read(2);
delay(250);
int chk1 = DHT11B.read(3);
Serial.println();
Serial.println("Suche DHT11 Sensor(en)...");
Serial.println("Scanning...");
  switch (chk0)
  {
    case DHTLIB_OK: 
                Serial.println("Sensor 1: OK"); 
                break;
    case DHTLIB_ERROR_CHECKSUM: 
                Serial.println("Sensor 1: Checksum error"); 
                break;
    case DHTLIB_ERROR_TIMEOUT: 
                Serial.println("Sensor 1: Time out error"); 
                break;
    default: 
                Serial.println("Sensor 1: Unknown error"); 
                break;
  }
  
  delay(1000);
  
    switch (chk1)
  {
    case DHTLIB_OK: 
                Serial.println("Sensor 2: OK"); 
                break;
    case DHTLIB_ERROR_CHECKSUM: 
                Serial.println("Sensor 2: Checksum error"); 
                break;
    case DHTLIB_ERROR_TIMEOUT: 
                Serial.println("Sensor 2: Time out error"); 
                break;
    default: 
                Serial.println("Sensor 2: Unknown error"); 
                break;
  }
 Serial.println("Scanning beendet !");
  Serial.println();
  delay (750);
}

Danke für Eure vielen Lösungsvorschläge. Ich versuche Sie gerade etwas nachzuvollziehen und bleibe immer wieder an der gleichen Stelle (bei unterschiedlichen Lösungsvorschlägen) hängen.

An der Stelle:

dht DHT11;

kommt die Fehlermeldung: dht does not name a type

Libaries vom Playground ist eingebunden, also ins Verzeichnis kopiert und dann die Programmieroberfläche neu gestartet. Da ich schon verschiedendlich Probelme mit dieser Definition hatte frage ich hier gleich mal nach.

Du brauchst die dht11.h, wenn du A.R.T.y's Sketch nutzen willst.

habe ich jetzt so gespeichert, aber nochmal schritt für schritt, glaube mittlerweile nämlich hier liegt mein problem.

von dieser Seite: Arduino Playground - HomePage den Code für DHT11.h und DHT11.cpp kopiert und in zwei eigene Dateien unter /Arduino/Libaries/DHT/ eingefügt, Arduino Oberfläche neu gestartet und den Code von A.R.T.y's Sketch ins Programmfenster eingefügt. Compile Vorgang gestartet und ich bekomme wieder diesselbe Fehlermeldung: 'dht11' dos not name a type

MfG jojo

Die findest Du unter dem DHT11 Code im Playground.
Einfach markieren, kopieren, in Datei einfügen und als dht11.h bzw. dht11.cpp speichern :wink:
Aber die gibt es bestimmt auch irgendwo als DL

Warst schneller :wink:
Nicht vergessen, die Lib in der IDE noch zu importieren bzw. nachsehen, ob sie auch vorhanden ist

KANN JA NICHT FUNKTIONIEREN: du benutzt DHT22, ich nur DHT11 :blush:

ich habe schon die DHT11 Bibliothek eingebunden und erstmal trockenversuche gemacht, dabei bekomme ich folgende Meldungen Siehe Screenshot: die DHT11 Bibliothek habe ich rein kopiert Arduino neu gestartet und die Libary auch mit Libary addieren importiert.

MfG hjojo

Hallo,
das sieht verdächtig danach aus, als wenn die Lib nicht richtig installiert ist.
Die beiden "Reiter mit x.cpp und x.h gehören dort nicht hin.

Du hast einen Arbeitsordner in dem sich Deine Sketche befinden.
In diesem Ordner gibt es einen Ordner "libraries"
In diesem Ordner gib es einen Ordner "DHT11"
In diesem Ordner befinden sich "DHT11.ccp" und "DHT11.h"
In Deinem Sketch gibt es nur einen Reiter mit "ProgrammName"
In dem Sketch dann , #include <dht11.h>
Hier gibt es ein wenig Info:
http://playground.arduino.cc/Main/DHTLib
Gruß und Spaß
Andreas

Probier dies mal aus:

//
//    FILE: dht11_test.ino
//  AUTHOR: Rob Tillaart
// VERSION: 0.1.00
// PURPOSE: DHT library test sketch for DHT11 && Arduino
//     URL:
//
// Released to the public domain
//
// Tuned by ARTy for 2 sensors

#include <dht.h>

dht DHT1;
dht DHT2;
#define DHT11_1 A15
#define DHT11_2 A14
void setup()
{
  Serial.begin(115200);
  Serial.println("DHT TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT_LIB_VERSION);
  Serial.println();
  Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
}

void loop()
{
  // READ DATA 1
  Serial.print("DHT11 Nummer 1, \t");
  int chk = DHT1.read11(DHT11_1);
  delay(1250);

  switch (chk)
  {
    case DHTLIB_OK:  
		Serial.print("OK,\t"); 
		break;
    case DHTLIB_ERROR_CHECKSUM: 
		Serial.print("Checksum error,\t"); 
		break;
    case DHTLIB_ERROR_TIMEOUT: 
		Serial.print("Time out error,\t"); 
		break;
    default: 
		Serial.print("Unknown error,\t"); 
		break;
  }

  delay(1250);

  // READ DATA 2
  Serial.print("DHT11 Nummer 2, \t");
  int chk1 = DHT2.read11(DHT11_2);
  delay(1250);

  switch (chk1)
  {
    case DHTLIB_OK:  
		Serial.print("OK,\t"); 
		break;
    case DHTLIB_ERROR_CHECKSUM: 
		Serial.print("Checksum error,\t"); 
		break;
    case DHTLIB_ERROR_TIMEOUT: 
		Serial.print("Time out error,\t"); 
		break;
    default: 
		Serial.print("Unknown error,\t"); 
		break;
  }

  delay(1250);


  // DISPLAY DATA
  Serial.print(DHT1.humidity, 1);
  Serial.print(",\t");
  Serial.println(DHT1.temperature, 1);
  delay(250);
  Serial.print(DHT2.humidity, 1);
  Serial.print(",\t");
  Serial.println(DHT2.temperature, 1);
  
  delay(2000);
}
//
// END OF FILE
//