DHT 11 und22 in einem Programm nutzen

Also ich würde gerne einen DHT 11 sowie einen DHT22 gleichzeitig nutzen wie mache ich das mein Versuch sieht folgender Massen aus:

#include "DHT.h"
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h> ; // NewLiquidCrystal_1.5.1
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define DHTPIN1 4
#define DHTPIN2 5
//#define DHTTYPE DHT11
#define DHTTYPE DHT22

int zeit;
int fan;

DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(" DHT11 / DHT22 -Test ");
  
  lcd.begin(16, 2);
  dht1.begin();  
  dht2.begin();
  pinMode(13, OUTPUT);
}

void loop() {
  zeit = (millis()/60000) % 60; 
  delay(2000);
  int h1  = dht1.readHumidity();
  int t1 = dht1.readTemperature();
  if (isnan(h1) || isnan(t1)) 
  {
    Serial.println("Fehler Sensor 1!");
    lcd.setCursor(0, 0);
    lcd.print("Fehler Sensor 1!");
  }
  else
  {
  Serial.print("Feuchtigkeit: ");
    Serial.print(h1);
    Serial.print(" %\t   ");
    Serial.print("Temperatur: ");
    Serial.print(t1);
    Serial.println(" Grad Celsius");
    
  lcd.setCursor(0, 0);
  lcd.print("H1: ");
  lcd.print(h1);
  lcd.print("% ");
  lcd.setCursor(9, 0);
  lcd.print("T1: ");
  lcd.print(t1);
  lcd.print("C ");
  delay(2000);
  int h2  = dht2.readHumidity();
  int t2 = dht2.readTemperature();
  if (isnan(h2) || isnan(t2)) {
   
    Serial.println("Fehler beim Lesen vom DHT-Sensor");
    lcd.setCursor(0, 1);
    lcd.print("Fehler Sensor 2!");
  }
  else
  {
  Serial.print("Feuchtigkeit: ");
    Serial.print(h2);
    Serial.print(" %\t   ");
    Serial.print("Temperatur: ");
    Serial.print(t2);
    Serial.println(" Grad Celsius");
    
  lcd.setCursor(0, 1);
  lcd.print("H2: ");
  lcd.print(h2);
  lcd.print("% ");
  lcd.setCursor(9, 1);
  lcd.print("T2: ");
  lcd.print(t2);
  lcd.print("C ");
  int vergl = h1-h2;
  if (vergl >= 5 || vergl <= -5){
    fan = 1;
  }
  if (fan == 1){
    if (vergl > 1 || vergl < -1){
      fan = 1;
    }else{
      fan = 0;
    }
  }
  
   if (fan == 1 || h1 < 63 || h2 < 63 || zeit >= 55 ){
    digitalWrite(13, HIGH);
  }else{
    digitalWrite(13, LOW);
  } 
 }
  }}

Der DHT 22 zeigt dann allerdings keine Korretenwerte an.
Desweiteren wenn ich sensensor abziehe (datenleitung wird weiterhin temp und feuchte mit 0 angegeben eigentlich müsste doch ein Fehler Sensor x raus kommen woran liegt das ?

zwei gleiche Sensoren DHT11 oder DHT22 gehen ohne Probleme bis auf das keine Fehlermeldung kommt wenn der Sensor abgeklemmt es kommt immer 0

Gibt es eine Möglichkeit den Serial Monitor über einen Programmer zunutzen ? da ich eigentlich keinen Arduino in meinen Projekten verwende sondern einen nacktren Atmel 328P. daher hab ich nur eine ISP Schnittstelle.

Schaltplan ehr simpel Arduino Uno Sensoren auf MAsse und Vcc sowie Daten PIN 5 6 dazu Display mit I2C Schnittstelle läuft alle soweit so gut.

Was ist der Vorteil von float gegenüber int bei der Abfrage der Sensoren, ausser das diese dann nachkommastellen angeben. müssen nachkommastelle, dann auch beim Vergleich der beiden Sensoren angegeben werden oder kann man float und int mischen ?

int vergl = h1-h2; diese zeile würde ich lassen die anderen zur ausgabe auf float setzen.

DHT dht1(4, DHT11);
DHT dht2(5, DHT22);

oder so ähnlich

Danke für deine Hilfe.
jemand noch Ideen für die anderen Problemchen ?

Hi

Wenn von der Lib keine Fehlermeldung kommt, dann kommt Da eben keine Fehlermeldung.
Wenn Du den Fehlerfall erkennen können möchtest, musst Du eine Lib nehmen, Die Das kann.

Weiter wäre zu Prüfen, ob ein Rückgabewert in einem INT ein ‘nan’-Fehler ergeben kann.

Aber ok, jetzt steht der Mars-Rover tausende Kilometer weit weg, zum Probieren etwas spät.
Sonst hätte man mit den Beispielen der Lib die Funktionalität erst austesten können - eben auch, was passiert, wenn der Sensor nicht antwortet.

Wenn ich mich recht erinner, war Das auch eine Art 1-wire. hatte damit aber nur einen Tag gespielt - heute nehme ich BME280 - von Denen liest man auch nicht so oft, daß die Feuchte-Werte sch***e sind und man das Teil notdürftig im heimischen Backofen kalibrieren können würde.

MfG

Ich geh mal davon aus das eine Fehlermeldung kommen sollte hat der jenige sich doch was bei gedacht das ein zufügen oder ?
In das Programm und ändern wäre das kleinere Problem, da ich das Projekt so auf gebaut habe das ich jederzeit die Programmierung ändenr kann.
mit den DHT hatte ich bis her keine Probleme wenn ich auf meine fertig wetterstation schaue oder auf mein Hydrometer sind die Werte relative nah bei einander 2-3% unterschied kann ich mit leben. Um stricken auf den BME280 sollte ja nicht das Problem sein der wird doch auch mit 3 Draht betrieben also kann ich die DHT doch gegen BME tauschen und die Befehle anpassen.

Der bme braucht 4 Drähte. Gnd, 5V, scl, sda

Vor einem Umbau auf BME wäre ich vorsichtig.
Wie lange ist die Leitung und wird das noch betriebssicher mit I2C funktionieren?

postmaster-ino:
Weiter wäre zu Prüfen, ob ein Rückgabewert in einem INT ein 'nan'-Fehler ergeben kann.

Nein. "Not a number" geht nur mit Float. Da gibt es Bit-Muster für solche speziellen Fälle wie NaN oder unendlich. Bei Integern kann man das einfach nicht codieren

Leitung hätte eine Länge von 1,5 -2m sollte gehen oder aber wie mache ich das mit einem Display kann man mehrere I2c an die beiden A4 A5 anschliessen und das gganze über die Adresse zuweisen ? weil am A4 A5 hängt ein LCD.

das wäre der Sinn und zweck von i2c, dass alle Devices unterschiedliche Adressen bekommen.
Ob du mit 1.5 - 2m bei einem "Inter-Integrated Circuit" - der eigentlich für die Verbindung auf einer PCB gedacht war - glücklich wirst, lass ich mal so im Raum stehen.

Was spricht eigentlich gegen zwei DHT11 oder zwei DHT22 - warum brauchst du den Mischbetrieb überhaupt?

Der Mischbetrieb dient lediglich dazu mal zu schauen was die beiden so treiben (Rudies Reste Rampe), hab ich noch so rum liegen gehabt. Eine vereinfachte Version des PRojektes läuft auf einem UNO Hatte es dort zum testen drauf um es dann auf eine Lochrasterplatine zu übertragen und ins eigentliche Projekt ein zu binden.

im eigentlichen Projekt stecken 2 DHT22, LCD I2C, Lüfter und nen nackter Atmel 328P der das ganze steuert.
Könnte man das ganze (Kabellänge)mit einem LCD an einem I2C testen ? oder müsste das defenitive der BME sensor sein ? LCD wäre noch vorhanden BME müsste man besorgen nur zum testen ehr nö.