Bitte um Hilfe if abfrage

Hi

Komm gerade mit meinem Programm nicht weiter.

Ich speicher in einer Variable einen Status ( An/Aus)

je nach zustand wird in einer weiteren Variablen geschrieben und soll je nachdem Lüfter schalten.

Wenn Luftfeuchte überwachung on ist soll bei der Wasserkühlung Fan1 abgeschaltet werden da für die Feuchteüberwachung genutzt.

Wenn Luftfeuchte überwachung Off ist soll bei der Wasserkühlung Fan1 mit zugeschaltet werden.

Ich füg mal einen Teil des Sketch an da das ganze Programm extrem lang ist.

Feucht_1 = On/OFF Feucht_2 = Eingestellter Feuchtigkeitswert h = Feuchtigkeitsmessung DHT22

//------------- Lüfter Luftfeuchte-------------
if (Feucht_1 == true) //&& ( h >= Feucht_2 ))
  {
     Wasser1 = false;
     EEPROM.write(320, Wasser1);  
      }
   else 
      {
        Wasser1 = true;
        EEPROM.write(320, Wasser1);
        }
        
if (Feucht_1 == true && h >= Feucht_2)   
      {
      analogWrite(FanPin1, FanSpeed1);
      }
           else
      {
        analogWrite(FanPin1, LOW);
        }

//Wasserkühlung
//    Optimal 25     minimum 24     maximum 27
if (Wasser1 == true && tempWasser >= WASSERMAXTEMP) 
//( tempWasser >= WASSERMAXTEMP )
    {
      analogWrite(FanPin1, FanSpeed1);
      analogWrite(FanPin2, FanSpeed2);
      analogWrite(FanPin3, FanSpeed3);
      }
     // if ( tempWasser >= WASSERMINTEMP )
     else
      {
        analogWrite(FanPin1, LOW);
        analogWrite(FanPin2, LOW);
        analogWrite(FanPin3, LOW);
        }    
    
if (Wasser1 == false && tempWasser >= WASSERMAXTEMP) 
//( tempWasser >= WASSERMAXTEMP )
    {
      //analogWrite(FanPin1, FanSpeed1);
      analogWrite(FanPin2, FanSpeed2);
      analogWrite(FanPin3, FanSpeed3);
      }
     // if ( tempWasser >= WASSERMINTEMP )
     else
     {
      //analogWrite(FanPin1, LOW);
      analogWrite(FanPin2, LOW);
      analogWrite(FanPin3, LOW);
      }

So funktioniert nur die Temp überwachung. Lösche ich die Zeilen ab Wasserkühlung funktioniert die Feuchte überwachung. Aber beides zusammen funktioniert nicht.

Ich bin echt schon code blind und seh den Fehler nicht. Mfg

Luppi: Komm gerade mit meinem Programm nicht weiter.

So funktioniert nur die Temp überwachung. Lösche ich die Zeilen ab Wasserkühlung funktioniert die Feuchte überwachung. Aber beides zusammen funktioniert nicht.

Ich bin echt schon code blind und seh den Fehler nicht.

Leider liegt das Problem oft in den Codezeilen, die nicht gezeigt werden.

Also bitte den kompletten Sketch zeigen.

Also bitte den kompletten Sketch zeigen.

Den kannst du gerne soweit kürzen, dass es kompiliert, aber nur noch das Problem zu sehen ist. Hauptsache die Variablen sind definiert und haben den vorgesehenen Wert. Woher sie ihren Wert bei dir tatsächlich bekommen, ist -hoffentlich- egal.

Evtl. verschwindet der Fehler auch unerwartet, und es lag dann z.B. an was anderem als deinem  if ...

Um den EEPROM zu schonen, kannst du z.B. das permanente EEPROM.write() schonmal weg lassen ;)

Hi

Hab den Code jetzt soweit gekürzt das er Kompilieren tut.
Kann das so aber grade nicht testen weil ich auf Arbeit bin und hier keinen Arduino habe.

Hoffentlich könnt ihr so damit etwas anfangen.

#include <EEPROMex.h>
#include "DHT.h"
//------------------------------------------------------ 3 Lüfter ausgänge  --------------------------------
const int FanPin1 = 44; // Pin für den Lüfter1
const int FanPin2 = 45; // Pin für den Lüfter2
const int FanPin3 = 46; // Pin für den Lüfter3
int FanSpeed1;
int FanSpeed2;
int FanSpeed3;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++ Variable Temperaturen ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int WASSERMINTEMP;
int WASSERMAXTEMP;
int OPTTEMP;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++Variable FAN Speed +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
boolean Wasser1;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++Variable Relais +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
boolean Feucht_1;
int Feucht_2;
//--------------------------------T E M P E R A T U R - M O D U L E--------------------------------------
double tempWasser = 0;
double tempRaum   = 0;

// DHT
double h = 0;
double t = 0;



void setup() {
  // put your setup code here, to run once:
  pinMode(FanPin1, OUTPUT); // Setzt den Pin des Lüfters als Ausgang
  pinMode(FanPin2, OUTPUT); // Setzt den Pin des Lüfters als Ausgang
  pinMode(FanPin3, OUTPUT); // Setzt den Pin des Lüfters als Ausgang
  
}

void loop() {
  // put your main code here, to run repeatedly:
//------------- Lüfter Luftfeuchte-------------
if (Feucht_1 == true) //&& ( h >= Feucht_2 ))
  {
     Wasser1 = false;
     EEPROM.write(320, Wasser1);  
      }
   else 
      {
        Wasser1 = true;
        EEPROM.write(320, Wasser1);
        }
        
if (Feucht_1 == true && h >= Feucht_2)   
      {
      analogWrite(FanPin1, FanSpeed1);
      }
           else
      {
        analogWrite(FanPin1, LOW);
        }
        
//Wasserkühlung
//    Optimal 25     minimum 24     maximum 27
if (Wasser1 == true && tempWasser >= WASSERMAXTEMP) 
//( tempWasser >= WASSERMAXTEMP )
    {
      analogWrite(FanPin1, FanSpeed1);
      analogWrite(FanPin2, FanSpeed2);
      analogWrite(FanPin3, FanSpeed3);
      }
     // if ( tempWasser >= WASSERMINTEMP )
     else
      {
        analogWrite(FanPin1, LOW);
        analogWrite(FanPin2, LOW);
        analogWrite(FanPin3, LOW);
        }    
    
if (Wasser1 == false && tempWasser >= WASSERMAXTEMP) 
//( tempWasser >= WASSERMAXTEMP )
    {
      //analogWrite(FanPin1, FanSpeed1);
      analogWrite(FanPin2, FanSpeed2);
      analogWrite(FanPin3, FanSpeed3);
      }
     // if ( tempWasser >= WASSERMINTEMP )
     else
     {
      //analogWrite(FanPin1, LOW);
      analogWrite(FanPin2, LOW);
      analogWrite(FanPin3, LOW);
      }  
}

Ich hab irgendwie die if reihenfolge in verdacht.
Kann mir aber nicht erklären warum.

Klar das EEprom habe ich raus genommen haut mir ja in jedem Loop einen rein.

Wasser1 ist das Gegenteil von Feucht_1.

  1. Wenn Feucht_1== false wird Fan1 auf LOW geschaltet und im gleichen Zyklus wegen Wasser1 == true auf FanSpeed1. Das ist sicher so nicht Absicht.

  2. Dein armer EEPROM ist vermutlich inzwischen übern Jordan (100.000 Zyklen schafft ein Arduino in wenigen Sekunden. )

  3. AnalogWrite( pin, LOW ); ist etwas unorthodox und funktioniert nur, weil LOW und 0 gleich sind.

  4. FanSpeed1 soll vermutlich eine Konstante sein. Wenn du sie so definieren würdest, sagte der Compiuler schon, dass du vergessen hast, sie zu initialisieren. So ist sie (als globale Variable) eben 0.

  5. Deine Kommentare vor denif, aber nicht vor denelse machen deinen Sketch schwer lesbar... Mal abgesehen von den nicht initialisierten Variablen, die dafür sorgen, dass sowieso alles egal ist ;)

Hi Joar den EEprom da muss ich mal schauen ob ich den zerschoßen habe.

Ja mit dem pin,low hast recht das werde ich noch umschreiben.

Ich definiere die FanSpeed über mein Menü pwm 90-255 ist keine const int ist nur eine int

Auf jedenfall läuft es jetzt so wie es soll. Ich hab mich echt schon Tot gelesen an meiner if. Für jemanden der den sketch nicht kennt sind meine Kommentare evtl störend hätte ich vll. weg nehmen sollen.

Hier auf jedenfall mal die die if Anweisung die jetzt so läuft wie sie soll.

//------------- Lüfter Luftfeuchte-------------
if (Feucht_1 == true) //&& ( h >= Feucht_2 ))
  {
     Wasser2 = false;
     //EEPROM.write(320, Wasser1);  
      }
   else 
      {
        Wasser2 = true;
        //EEPROM.write(320, Wasser1);
        }
        
if (Feucht_1 == true && h >= Feucht_2)   
      {
      analogWrite(FanPin1, FanSpeed1);
      }
           else
      {
        analogWrite(FanPin1, LOW);
        }
        
//Wasserkühlung
//    Optimal 25     minimum 24     maximum 27
if (Wasser2 == true ) //&& tempWasser >= WASSERMAXTEMP) 
    {
      if ( tempWasser >= WASSERMAXTEMP )

    {
      analogWrite(FanPin1, FanSpeed1);
      analogWrite(FanPin2, FanSpeed2);
      analogWrite(FanPin3, FanSpeed3);
      }
      else
            {
        analogWrite(FanPin1, LOW);
        analogWrite(FanPin2, LOW);
        analogWrite(FanPin3, LOW);
        }    
      }  
    
if (Wasser2 == false ) //&& tempWasser >= WASSERMAXTEMP) 
    {
     if ( tempWasser >= WASSERMAXTEMP )
    {
      //analogWrite(FanPin1, FanSpeed1);
      analogWrite(FanPin2, FanSpeed2);
      analogWrite(FanPin3, FanSpeed3);
      }
           else
     {
      //analogWrite(FanPin1, LOW);
      analogWrite(FanPin2, LOW);
      analogWrite(FanPin3, LOW);
      }   
      }

Danke nochmal für jeden der sich Zeit genommen hat. Mfg

Edit: Leider wieder mir meinen Kommentaren ;-)