Bedingungsschleife wird übersprungen???

Hallo Leute

Nach langem gastlesen habe auch ich nun ein Problem.

In dem Programm sollen 2 DHT22 ausgelesen werden was bisher auch sehr gut funktioniert. Danach soll Automatisch entschieden werden ob 3 Lüfter aktiviert werden oder 1 Elektrischer Entfeuchter.

Es gibt einen manuellen Schalter der die Automatik ausser Kraft setzt und die Lüfter aktiviert.

Warum auch immer funktioniert das Programm nicht mehr sobald ich den Schalter/Taster mit in das Programm integriere.

// Abs. Feuchte=13,233*rel.Feuchte*((10^((7,5*T)/(237+T)))/(273,16+T))
//T=Lufttemperatur
// Sensor 1 indoor
// Sensor 2 outdoor
// this program may not be good looking but I`m staisfied
//
// Anschluss DHT 22 
// 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

#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //LiquidCrystal_I2C.h Bibliothel einbinden
#include <math.h>
#include <SPI.h> // needed in Arduino 0019 or later
#define DHTPIN1 2   // what pin we're connected to
#define DHTPIN2 4   // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)


int Taster=7;
int Fan1=8;
int Fan2=9;
int Fan3=10;
int Fan4=11;
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
char tmp[10];
char tosend[140];


void setup() {
 Serial.begin(9600);
 Serial.println("DHTxx test!");
 pinMode(Taster,INPUT);
 pinMode(Fan1,OUTPUT);  //FAN1
 pinMode(Fan2,OUTPUT);  //FAN2
 pinMode(Fan3,OUTPUT); //FAN3
 pinMode(Fan4,OUTPUT); //FAN4 Entfeuchter
 lcd.begin(16,2); 




 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();
 int t1 = dht1.readTemperature();
float h2 = dht2.readHumidity();
 float t2 = dht2.readTemperature();
float hA1 = 0;
float hA2 = 0;

 // 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");
 } else {
   
 double x = 0;
 double y = 0;
 double z = 0;
 x= 13.233*h1;
 y=7.5*t1;
 z = 237+t1;
 y = y/z;
float m = pow(10,y);
 z = 273+t1;
 m=m/z;

 hA1=m*x;
   Serial.print("Humidity1: ");
   Serial.print(h1);
   Serial.print(" %\t");
   Serial.print("Temperature1: ");
   Serial.print(t1);
   Serial.println(" *C");
   Serial.print("HumidityA1: ");
   Serial.print(hA1);
   Serial.println(" g");
   lcd.setCursor(0,0); //Ab hier kann das I2C LCD Modul genau wie das einfache LCD Modul programmiert werden.
   lcd.print(t1);
   lcd.setCursor(5,0); //Ab hier kann das I2C LCD Modul genau wie das einfache LCD Modul programmiert werden.
   lcd.print(h1);
   lcd.setCursor(11,0); //Ab hier kann das I2C LCD Modul genau wie das einfache LCD Modul programmiert werden.
   lcd.print(hA1);
   
 }





 if (isnan(t2) || isnan(h2)) {
   Serial.println("Failed to read from DHT");
 } else {
 
 double x = 0;
 double y = 0;
 double z = 0;
 x= 13.233*h2;
 y=7.5*t2;
 z = 237+t2;
 y = y/z;
float m = pow(10,y);
 z = 273+t2;
 m=m/z;

 hA2=m*x;
   Serial.print("Humidity2: ");
   Serial.print(h2);
   Serial.print(" %\t");
   Serial.print("Temperature1: ");
   Serial.print(t2);
   Serial.println(" *C");
   Serial.print("HumidityA2: ");
   Serial.print(hA2);
   Serial.println(" g");
   lcd.setCursor(0,1); //Ab hier kann das I2C LCD Modul genau wie das einfache LCD Modul programmiert werden.
   lcd.print(t2);
   lcd.setCursor(5,1); //Ab hier kann das I2C LCD Modul genau wie das einfache LCD Modul programmiert werden.
   lcd.print(h2);
   lcd.setCursor(11,1); //Ab hier kann das I2C LCD Modul genau wie das einfache LCD Modul programmiert werden.
   lcd.print(hA2);
 }
digitalRead(Taster);

//Luefter An Stufe 1 hA1>12,5 & hA2<10 & Taster Aus
 if ((hA1>12.5) && (hA2<10.0))// && (Taster==0))
 {
 Serial.println(" Luefter an Stufe 1");
 digitalWrite(Fan1,LOW);
 digitalWrite(Fan2,LOW);
 digitalWrite(Fan3,LOW); 
 digitalWrite(Fan4,HIGH);
 } 
 // Luefter Aus Entlüfter An Stufe 2
 if ((hA1>13.2) && (hA2>10.5))//&& (Taster==0))//Hier Bitte die wunschfeuchte eintragen fuer Trocknungsgerät
 {
 Serial.println(" Entluefter an Stufe 2");
 digitalWrite(Fan1,HIGH); 
 digitalWrite(Fan2,HIGH);
 digitalWrite(Fan3,HIGH); 
 digitalWrite(Fan4,LOW); 
 }
 // Alles Tutti
 if ((hA1<12))// && (Taster==0))
 {
 Serial.println(" Alles Tutti ");
 digitalWrite(Fan1,HIGH);
 digitalWrite(Fan2,HIGH);
 digitalWrite(Fan3,HIGH);
 digitalWrite(Fan4,HIGH); 
 }
 //Tasterfunktion
 if (Taster==1)
 {
 digitalWrite(Fan1,LOW);
 digitalWrite(Fan2,LOW);
 digitalWrite(Fan3,LOW);
 digitalWrite(Fan4,HIGH);
 }
 delay(500); 
}

Wenn Du schon lange mitliest, solltest Du eigentlich wissen, dass es der Lesbarkeit dient, den Code in Codetags zu packen </>
Das kannst Du auch nachträglich noch ändern.

Und die Beispiele in der IDE zeigen dir auch wie du Taster abfragen musst. "digitalRead(Taster);" alleine reicht nicht.

Aber setze deinen Sketch in Code-Tags, wie du schon drum gebeten wurdest.

int Taster=7;
// und später dann
if (Taster==1)

Wird zu:

if (7==1)

Ob diese Bedingung wohl je erfüllt sein wird?

Bedingungsschleife

Meinst du eine if Schleife ?

Werde das gleich mal ausprobieren.

Ich hatte das Programm vorher auf einem raspberry pi laufen ohne Display da ging das so :slight_smile:

Wie setzte ich den Code genau ab ? Habe die Funktion übers Handy leider nicht gefunden.

Was passiert eigentlich wenn einer der DHT Sensoren keine gescheiten Daten liefert ? Hatte dazu beim raspberry einen Speicher der dann mit dem letzten “guten” wert weiterarbeiten.

CyrixTheDragon:
Werde das gleich mal ausprobieren.

Ich hatte das Programm vorher auf einem raspberry pi laufen ohne Display da ging das so :slight_smile:

Wie setzte ich den Code genau ab ? Habe die Funktion übers Handy leider nicht gefunden.

Was passiert eigentlich wenn einer der DHT Sensoren keine gescheiten Daten liefert ? Hatte dazu beim raspberry einen Speicher der dann mit dem letzten “guten” wert weiterarbeiten.

Das mit den Code-Tags wurdedoch obenschon beschrieben.
Schaltfläche </> im Editor-Fenster verwenden.

Wie es im Raspi funktioniert, weiß ich nicht, aber im Arduino musst du abfangen bzw. eigenständig programmieren.
Das mit den Beispielen hatte ich ja schon geschrieben.

Du musst bei deinem Beitrag auf More und modify klicken.

Hallo, nicht die Zeichen sollst du verwenden, sondern die Schaltfläche. Notfalls in "How to use this forum" nachlesen.

Edit: Warum ignorierst du unsere Vorschläge ?