Ardutronix-Forum

Bitte oder Registrieren, um Beiträge und Themen zu erstellen.

Fragen zum Quellcode…

Hi Ardutronix,

ich habe heute mal den Quellcode kopiert und auf insgesamt 8 Sensoren und Magentventile erweitert. Den Code stelle ich später auch gerne hier ein wenn Bedarf besteht. Eine Rückfrage zum bisherigen Code habe ich allerdings an zwei Stellen:

AnalogValue = analogRead(sensor);
  Serial.print("Gemessener Wert: ");
  Serial.println(AnalogValue);
  ///////////////////////////////////////////////////////////////// Feuchtigkeitssensor 
  UmidityPercent = map(AnalogValue, 300, 554, 0, 100); 
  /////////////////////////////////////////////////////////////////
  moisture = constrain(moisture, 0, 100);
  moisture = 100 - UmidityPercent;
Weshalb wird die magenta farbene Zeile ausgeführt? Weshalb ziehe ich den aktuell eingelesenen Wert von 100 ab?

Frage 2:
if( (moisture > (PreviousValue)+1) || (moisture < (PreviousValue)- 1))
  {
    lcd.setCursor(1,0);
    lcd.print("Sensor: ");
    lcd.print("      ");
    lcd.setCursor(11,0);
    moisture = constrain(moisture, 0, 100);
    lcd.print(moisture);
    lcd.print("%");
    
    if(moisture < MOISTURE_SET && LowUmid == 0)
    {
    digitalWrite(piezo, HIGH);
    delay(30);
    PumpOn();
    LowLevelLed();
    lcd.setCursor(1,1);
    lcd.print("trocken ");
    LowUmid = 1;
    HighUmid = 0;
    }
    if(moisture >= MOISTURE_SET && HighUmid == 0)
    {
    PumpOff();
    LowLevelLedOFF();
    HighUmid = 1;
    LowUmid = 0;
    lcd.setCursor(1,1);
    lcd.print("feucht   ");
    }  
    
    PreviousValue = moisture;
  }
Weshalb benötige ich einen PreviousValue? Wenn die aktuelle Feuchtigkeit größer als der Grenzwert ist, dann bleibt die
Pumpe aus und umgekehrt...

Hallo ManzW,

vielen Dank für dein Interesse.

Frage 1:

Mit „constrain“ werden die Werte in % von 0% bis maximal 100 % eingegrenzt. Man erhält sonst teilweise Werte unter 0% bzw. über 100%, je nach map()-Funktion.

Frage 2:

Mit

if( (moisture > (PreviousValue)+1) || (moisture < (PreviousValue)- 1))

Der Doppelstrich ist ein Logisches OR (entweder/oder).
Also, wenn einer der Bedigungen wahr ist -> dann treten folgende Bedingungen in Kraft:
if(moisture < MOISTURE_SET && LowUmid == 0)

Wenn die Feuchtigkeit kleiner ist als die eingestellt Feuchtigkeit -> Pumpe geht an ...
if(moisture >= MOISTURE_SET && HighUmid == 0)

Wenn die Feuchtigkeit größer gleich der eingestellten Feuchtigkeit ist -> Pumpe bleibt aus ...

Die Feuchtigkeit wird dann in der „PreviousValue“ gespeichert PreviousValue = moisture

, damit der Wert auch aktualisiert bleibt und im Loop mit dem aktualisierten Wert gearbeitet werden kann.

Viele Grüße
Ardutronix

 

www.ardutronix.de
error: Der Inhalt ist urheberrechtlich geschützt!

Diese Website benutzt Cookies. Wenn Du die Website weiter nutzen willst, stimme der Verwendung von Cookies zu.