Zwei DHT22 Sensoren auslesen

Hallo,
ich verstehe nicht ganz wie ich zwei DHT22 auslesen kann. Einen auslesen ist kein Problem, aber bei zwei gibt der nur den Wert von einem zwei mal aus. Ich habe es versucht (Sketch unten) aber irgendwas stört sich da gegenseitig. Mag mir jmd helfen, das ich das verstehe?

#include "DHT.h"
#define DHTPIN 4
#define DHTPIN 5
#define DHTTYPE DHT22 
DHT dht (DHTPIN, DHTTYPE);
DHT dht2 (DHTPIN, DHTTYPE);

#include <DS3231.h>
DS3231  rtc(SDA, SCL);
Time  t;


int LSR_1 = 2;                             //Leuchtstoffröhre Fach1
int LSR_2 = 3;                             //Leuchtstoffröhre Fach2

void setup()
{
  Serial.begin(9600);
  rtc.begin();
        //rtc.setDOW(WEDNESDAY);           //Setzt den Wochentag (großschreiben)
        //rtc.setTime(12, 0, 0);           //Setzt die Zeit (Stunde,Minute,Sekunde)
        //rtc.setDate(1, 1, 2014);         //Setzt das Datum (Tag,Monat,Jahr)
        
  pinMode(LSR_1, OUTPUT); 
  pinMode(LSR_2, OUTPUT);

  dht.begin();
  dht2.begin();
  
}

void loop()
{
  t = rtc.getTime();                       //Liest den DS3231 frisch aus
  
  Serial.print(rtc.getDOWStr());           //Gibt das Datum und die Zeit im Seriellen Monitor wieder
  Serial.print(" ");
  Serial.print(rtc.getDateStr());
  Serial.print("  Zeit: ");
  Serial.print(rtc.getTimeStr());

  
  if((t.hour >= 19) && (t.hour < 20))
     digitalWrite(LSR_1,LOW);
   else
     digitalWrite(LSR_1,HIGH);
     
  if((t.hour >= 20) && (t.hour < 21))
     digitalWrite(LSR_2,LOW);
   else
     digitalWrite(LSR_2,HIGH);

  
  float h = dht.readHumidity();            //Luftfeuchte auslesen
  float t = dht.readTemperature();         //Temperatur auslesen
  
  Serial.print(" Luftfeuchte_1: ");           //Gibt die Luftfeuchte aus
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print(" Temperatur_1: ");           //Gibt die Luftfeuchte aus
  Serial.print(t);
  Serial.print(" C");
  
  h = dht2.readHumidity();
  t = dht2.readTemperature();

  Serial.print(" Luftfeuchte_2: ");           //Gibt die Luftfeuchte aus
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print(" Temperatur_2: ");           //Gibt die Luftfeuchte aus
  Serial.print(t);
  Serial.println(" C");
  
  delay(5000);
  
}

#define DHTPIN 4
#define DHTPIN 5

Wie kann ich das anders definieren? Die Pins, die ich belege, muss ich doch auch als dhtpin definieren. Oder kann ich das ändern?

DHT dht (DHTPIN 4, DHTTYPE)
DHT dht2 (DHTPIN 5, DHTTYPE)

Dhtpin ist nur die Variable, du kannst die Pinnummer direkt einsetzen.

Oder Du schreibst:

#include "DHT.h"
#define DHTPIN 4
#define DHTPIN2 5
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
DHT dht2 (DHTPIN2, DHTTYPE);

Gruß Tommy

#include "DHT.h"
#define DHTTYPE DHT22
DHT dht (4, DHTTYPE);
DHT dht2 (5, DHTTYPE);

Warum dann nicht gleich so, bei so einem einfachen Sketch?

Ich weiss, entgegen der programming correctness, aber der Anfänger verstehts

Es sind alles mögliche Varianten. Mag er sich eine aussuchen.

Gruß Tommy

danke für die antworten, ich habs jetzt geschafft. hätte ich mit bisschen testen und probieren auch hinbekommen

ElEspanol:

#include "DHT.h"

#define DHTTYPE DHT22
DHT dht (4, DHTTYPE);
DHT dht2 (5, DHTTYPE);




Warum dann nicht gleich so, bei so einem einfachen Sketch?

Ich weiss, entgegen der programming correctness, aber der Anfänger verstehts

Weil da im direkt nächstens Schritt potentiall ganz viele andere Globals drumgeschrieben werden, die es unübersichtlich machen. Wenn Variablenzuweisungen einen Neuling verwirren, muss er sich Variablenzuweisungen genauer ansehen, bevor es sinn macht, irgendwas anderes zu tun.
Also gleich

#include "DHT.h"
const uint8_t dhtpin1 = 4;
const uint8_t dhtpin2 = 5;

DHT dht1 (dhtpin1, DHTTYPE);
DHT dht2 (dhtpin2, DHTTYPE);

Dann schmeißt der Compiler nämlich auch verständliche Warnungen, wenn man was vergeigt. Theoretische Nachteile beim Speicher müssten wegoptimiert werden.

Und ja, man könnte daraus im nächsten Schritt noch Arrays machen, falls man mal 50 DHT22 anschließen will.