Web-Seite gibt Statusanzeige nicht zurück

Hallo,

ich habe wie schon oben beschrieben folgendes Problem:
Ich habe auf einen ESP32 NodeMCU einen einfachen Sketch für einen Feuchtesensor aufgespielt.
Mit diesem Sketch kann ich die Sensorwerte auf einer Web-Seite ausgeben lassen, sowie einen Ausgang schalten lassen, in meinem noch Teststadion eine LED.
Das Programm lasse ich momentan auch schneller durchlaufen, nur um zu sehen ob alles schaltet.
Ich habe drei Stadien bisher eingegeben, die LED leuchtet auch dementsprechend auf oder geht auch aus und ich kann den Wert sowie den Pin-Anschluss auf meiner HTML-Seite ausgeben lassen.
Nun soll aber auch noch der Status der Pumpe angezeigt werden und später auch noch eine weitere Bemerkung über den Zustand der Erdfeuchte.
Aber genau da hab ich das Problem, ich bekomme diese Werte nicht angezeigt.
Habt ihr einen Tip was da falsch läuft?
Und bitte jetzt nicht schreiben: ich hätte das ganz anders gemacht.
Sicher gibt es wesentlich bessere Lösungen, ich bin auch kein Programmierer, aber für mich reicht der Sketch vom Prinzip her ja und er macht auch das was er soll. Ich verstehe eben nur nicht warum ich keine Statusanzeige in meiner Web-Seite bekomme, den Sensorwert und Pin-Anschluss sehe ich ja auch....... :confused:
Ich bekomme nur leider beim besten Willen keine Statusanzeige meiner Pumpe.

           {
              Sensor_1_Wert = analogRead(Sensor_1_Pin);
              client.println("<table><tr><th>Sensor</th><th>Pin Nr.:</th><th>Wert</th><th>Status Erde</th><th>Status Pumpe</th></tr>");         /* Tabelle mit Tabellenbezeichnungen, in diesem Fall 3-Spaltig  */
              client.println("<tr><td>Sensor 1</td><td>");
              client.println(Sensor_1_Pin);
              client.println("<td><span class=\"sensor\">");
              client.println(Sensor_1_Wert); 
              client.println("<td><span class=\"sensor\">");

              if (digitalRead(Pumpe_1) == HIGH)
                Pumpe_1_Status = digitalRead(Pumpe_1);
                client.println("<td><span class=\"voltage\">");
                client.println(Pumpe_1_Status);
            }

Danke, Jörg

giessanlage.ino (10.4 KB)

a) schau mal in den ausgegeben Quelltext ob da wirklich nichts steht, denn das ist nicht vollständig

              if (digitalRead(Pumpe_1) == HIGH)
                Pumpe_1_Status = digitalRead(Pumpe_1);
                client.println("<td><span class=\"voltage\">");
                client.println(Pumpe_1_Status);

du machst td nicht zu.

b) gibt dir die Werte auf der Seriellen aus, dann siehst du, was passieren sollte.

c) Validiere mal deinen HTML Quellcode: https://validator.w3.org/

d) ja ich hätte das ganz anders aufgebaut. Wenn du auf einem ESP bist, dann nimm das Beispiel Webserver | HelloServer als Basis!

edit

e) du, dein ganzes HTML ist eigentlich verbogen

client.println("</style></head><body><h1>ESP32 mit BME280</h1>");
            client.println("<tr><td>Diese Seite gibt die momentanen Klimadaten  im Wohnzimmer aus.</td><td>
");
            client.println("<tr><td>Die Seite aktualisiert sich selbstst&auml;ndig alle 10 Sekunden<tr><td>
");
            client.println(" 
");

das passt doch nicht. Wo beginnt table. Alles Kraut und Rüben. Validiere dein HTML!!!

noch mal edit:

f) was machst du da unten in Zeile 170 (und auch noch öfters) mit client.print? - Da ist die Seite ja schon lange draußen beim Browser. Du hast bei 152 ja schon client.stop gemacht!

f) was machst du da unten in Zeile 170 (und auch noch öfters) mit client.print? - Da ist die Seite ja schon lange draußen beim Browser. Du hast bei 152 ja schon client.stop gemacht!

War ein falscher Fehler von mir, hab ich vergessen aus dem Code raus zu nehmen..... :confused:

a) schau mal in den ausgegeben Quelltext ob da wirklich nichts steht, denn das ist nicht vollständig

Stimmt nur teilweise, aber selbst wenn ich so abändere:

                Pumpe_1_Status = digitalRead(Pumpe_1);
                client.println("<td><span class=\"sensor\">");
                client.println(Pumpe_1_Status);
                client.println("</td>");

ändert sich genau so wenig,
Und wenn ich jede Zeile mit " /td " beende, was irgendwie logisch erscheinen soll, erscheinen keine Daten mehr.
Ich habe aber wie du sehen kannst, wenigstens im letzten print-Abschnitt td gechlossen, was aber auch nichts ändert.

c) Validiere mal deinen HTML Quellcode

Die Seite hab ich momentan nicht Online sondern nur im Heimnetz....

b) gibt dir die Werte auf der Seriellen aus, dann siehst du, was passieren sollte.

Selbst im seriellen Terminal bekomme ich keinerlei Angaben zu den Pumpenstatus.

das passt doch nicht. Wo beginnt table

table beginnt im Sketch :

              Sensor_1_Wert = analogRead(Sensor_1_Pin);
              client.println("<table><tr><th>Sensor</th><th>Pin Nr.:</th><th>Wert</th><th>Status Erde</th><th>Status Pumpe</th></tr>");         /* Tabelle mit Tabellenbezeichnungen, in diesem Fall 3-Spaltig  */
              client.println("<tr><td>Sensor 1</td><td>");                                            /*  Spaltenbezeichnung  */
              client.println(Sensor_1_Pin);                                                           /* Ausgabe Pin-Anschluss  */
              client.println("<td><span class=\"sensor\">");                                          /* Tabulator  */
              client.println(Sensor_1_Wert);                                                          /*  Sensorwert der ausgegeben wird  */
              client.println("<td><span class=\"sensor\">");

Die Tabelle hab ich jetzt auch noch vorsichtshalber beendet, was aber dem ganzen Problem nicht behilflich ist.
Ich lege den nochmals abgeänderten Sketch bei.....

giessanlage.ino (10.6 KB)

Joggel67:
Selbst im seriellen Terminal bekomme ich keinerlei Angaben zu den Pumpenstatus.

Dann machst Du etwas generell falsch. Den HTML-Validator gibt es auch als addon zum Firefox.

Gruß Tommy

Joggel67:
Die Tabelle hab ich jetzt auch noch vorsichtshalber beendet, was aber dem ganzen Problem nicht behilflich ist.

Dann kreis das doch logisch ein.

a) bekommst Du im seriellen Monitor die Ausgaben

   Serial.println("Client wurde getrennt.");
   Serial.println("");

b) kannst Du

  • in Zeile 161 hinter der Klammer ein
Serial.println("Start aller paar Sekunden");
  • in Zeile 163 hinter der Klammer ein
Serial.println("Start Sensorausagbe");

einfügen und beide Ausgabe im seriellen Monitor validieren?

Also, folgendes hab ich jetzt gemacht:

a) Serial.println("Client wurde getrennt.");
Serial.println("");

erscheint immer wieder mal....

GET / HTTP/1.1
Host: xxxxxxxxxxxxxxxxxxxxxx
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

Client wurde getrennt.

b) kannst Du

  • in Zeile 161 hinter der Klammer ein

Serial.println("Start aller paar Sekunden");

  • in Zeile 163 hinter der Klammer ein

Serial.println("Start Sensorausagbe");

Erscheinen beide Meldungen im SM (siehe Anhang)

und von wegen:

Dann machst Du etwas generell falsch. Den HTML-Validator gibt es auch als addon zum Firefox.

Bis auf ein paar Tabulatorfehler die er mir anzeigt, welche ich aber für die Tabelle brauch, alles behoben..... Waren so wie ich gesehen hab, aber auch nicht systemrelevante Fehler.

Joggel67:
Also, folgendes hab ich jetzt gemacht

Erscheinen beide Meldungen im SM (siehe Anhang)

Ok,
da im seriellen Monitor doch die Ausgaben der Sensoren kommen, müsstest Du jetzt noch schreiben, wo Du die Statusausgabe der Pumpen erwartest.

Denn wenn die Bedingung in Zeile 166 erfüllt ist, kommst Du nicht mehr in Zeile 177ff.
(Gilt auch für Sensor2 weiter unten)

Woanders sehe ich im Moment keine Ausgabe zum Pumpemstatus.

Sorge dafür, das Du in jeder erfüllten Bedingung eine Ausgabe zum Status bekommst, die dann auch validiert ist. (reicht ja ne LED :wink: )

Dann schaun wir nach dem html-code.

Die Befehle zum schalten der Status-LED`s sind ja im seriellen Abschnitt erkennbar, z.B. 169 - 178

      {
        {
          digitalWrite(Pumpe_1, 0);
          digitalWrite(ledBlau, 255);
          digitalWrite(ledRot, 0);
          Serial.println("Dem Sensor 1 ist es zu feucht");
          Serial.println();
          Serial.println();
        }
      }

Diese LED`werden auch schön brav geschaltet, hab ich aber nicht als Statusmeldungen in der seriellen Ausgabe da mir sonst der ganze Sketch zu überlaufen wird und ich nicht als Meldung brauche, da sie ja geschaltet werden...

da im seriellen Monitor doch die Ausgaben der Sensoren kommen, müsstest Du jetzt noch schreiben, wo Du die Statusausgabe der Pumpen erwartest.

Der Pumpenstatus wird nicht im seriellen Teil erwartet, sondern im HTML-Code mit Abfrage der Pins, Zeilen 112 - 115:

                Pumpe_1_Status = digitalRead(Pumpe_1);
                client.println("<td><span class=\"sensor\">");
                client.println(Pumpe_1_Status);
                client.println("</tr></td></span>");

Die Angaben vom Sensoranschluss und wie hoch der Sensorwert ist, wird ja auch ausgegeben, dazu ein Bild.
Und ich melde mich erst heute zum späten Nachmittag wieder, da ich in der glücklichen Lage bin in die Arbeit gehen zu können :slight_smile:

Ach ja, falls jemand etwas verwirrende Bemerkungen bezüglich Seitenneuaufbau oder Laufzeiten der Schaltungszustände sieht, diese sind erst einmal irrelevant und lediglich wegen Testzwecken noch nicht richtig abgeändert :o

Kommentiere mal reset() aus.
Auf einem Mega mit ethernetschield nachgestellt, bekomme ich eine 1 im Pumpenstatus.

void reset()
{
//  digitalWrite(Pumpe_1, 0);
//  digitalWrite(Pumpe_2, 0);
  digitalWrite(ledBlau, 0);
  digitalWrite(ledRot, 0);
}

Du machst nur an einer Stelle die Pumpe1 an (Zeile 188):

      else if (Sensor_1_Wert >= 2100)
      {
        digitalWrite(Pumpe_1, 255);

Und weiter geht es mit:

        digitalWrite(ledBlau, 0);
        digitalWrite(ledRot, 255);
        Serial.println("Dem Sensor 1 ist es zu trocken");
        Serial.println();
        Serial.println();
      }
        reset();       // ?????

Das Ding bleibt nicht an.

Für Pumpe 2 fängst Du in Zeile 204 an
Das reset(); in Zeile 240 steht aber noch innerhalb der Bedingung.
Die Pumpe ist gleich wieder aus.

Weiter kann ich Dir jetzt nicht helfen.
Schau einfach drauf und bau Dir viel mehr Ausgaben ein. Das geht auch ohne die vielen Serial.println(); die nur Leerzeilen erzeugen.
Schreib lieber sowas wie Serial.println("Ausgabepunkt 1 erreicht"); etc.

Und wenn ein Punkt nicht erreicht wird, such was vorher (nicht) passiert.

Und ja, der html-code gibt was aus....

my_xy_projekt:
Kommentiere mal reset() aus.
Auf einem Mega mit ethernetschield nachgestellt, bekomme ich eine 1 im Pumpenstatus.

kann man denn überhaupt eine 0 bekommen für Pumpe 1, bei der Abfrage?

              if (digitalRead(Pumpe_1) == HIGH)
                Pumpe_1_Status = digitalRead(Pumpe_1);

Moko:
kann man denn überhaupt eine 0 bekommen für Pumpe 1, bei der Abfrage?

              if (digitalRead(Pumpe_1) == HIGH)

Pumpe_1_Status = digitalRead(Pumpe_1);

Der Teil ist in #2 nicht (mehr) vorhanden.

das ist in seinem Sketch aus #2 auch nicht mehr in einem if.
Ich warte jetzt mal auf seinen Letztstand, weil der Sketch aus #2 ist noch nicht vollständig korrigiert, und wenn er so wie in #5 geschrieben seine 20 Fehler ausgebessert, dann kann man sich das wieder ansehen. Dazu braucht es aber den aktuellen Sketch vom TO.

Ok, sorry. Hatte nur den Sketch in #0 gesehen :frowning:

Ich lege jetzt noch einmal den kompletten Sketch rein.
Ich habe den reset noch drin gelassen, jetzt aber nur noch ganz am Schluss im loop (230).
Genau so hab ich einige unötige Klammern raus genommen, ist mir gar nicht bewusst gewesen wieviel ich da noch drin hatte.
Was mir aufgefallen ist und da ist glaub ich auch der Hund begraben, ist folgendes:
Nehme ich den reset aus dem Programm, läuft zwar das Programm durch ABER meine Pumpen werden nicht mehr nach dem "millis" Befehl ein und ausgeschaltet. Sie ändern ihren Zustand erst, nachdem auch der Sensor den Wert geändert hat. Das ist ja aber nicht Sinn und Zweck der Sache, es soll ja das Programm nur alle paar Sekunden nachschauen und dementsprechend Einschalten oder auch sein lassen.... (später natürlich nur alle paar Stunden)
Nehme ich den reset Befehl dagegen raus, erscheint auch die Statusmeldung 1 oder 0......
Irgend wo ein Denk- oder Programmfehler, nur leider finde ich den Fehler nicht...... :cold_sweat:

giessanlage.ino (10.4 KB)

Was mir aufgefallen ist und da ist glaub ich auch der Hund begraben, ist folgendes:
Nehme ich den reset aus dem Programm, läuft zwar das Programm durch ABER meine Pumpen werden nicht mehr nach dem "millis" Befehl ein und ausgeschaltet. Sie ändern ihren Zustand erst, nachdem auch der Sensor den Wert geändert hat.

Ja, das kommt davon, weil Du nicht kommentierst, was Du willst!

 // Serial.println("Start aller paar Sekunden");
    if (millis() % 8000 < 5000)                                                                      /*   Timer von 8 Sekunden Led's werden für 5 Sekunden eingeschaltet  */

Und weiter oben hast Du geschrieben, das man sich nicht von den irreführenden Texten verführen lassen soll...

Der Sketch macht, wenn Du das reset(); drin lässt nicht das was Du willst.
Wenn es raus ist, kommt ansatzweise was gefordert wird.
Die Ausgabe auf dem WebMonitor UND das passende Ereignis war schon immer ok.

Du willst das sich das Ereignis verändert.
Darum habe ich gestern in #6 mit dem seriellen Monitor angefangen und bin die Ereigniskette angegangen.
Ich hatte dazu schon eine Idee, die Du leider nicht mehr zugelassen hast.

Schön, das der Sketch jetzt durchformatiert ist.
Und ich denke, ich habe jetzt auch erfasst, was Du willst.
Bitte korrigiere mich, wenn es nicht passt.

  • lese durchgängig die Sensoren
  • Wenn zu trocken, gebe Warnung aus "zu trocken" (und schalte Pumpe ein)
  • Wenn zu nass, gebe Warnung aus "zu nass" (und schalte Pumpe aus)
  • Wenn im Giessbereich, gebe aus "jetzt giessen" (und schalte Pumpe ein)
  • Wenn Pumpe ein, mache die nach xx sekunden aus
  • Fange an von vorn.

Die Ausgabe via web ist (derzeit) nur ein Nebenschauplatz.

Kürze den Sketch auf die notwendigen(!) funktionalen Komponenten mit den entsprechenden Ausgaben auf dem seriellen Monitor.
Dann kannst Du erweitern.

Also gut, jetzt hab ich den Sketch komplett ohne Web-Seite zusammengestellt.
Die Pumpenanschlüsse schalten laut millis, die serielle Ausgabe zeigt das an was beim Sensorwert ausgegeben werden soll.

lese durchgängig die Sensoren
Wenn zu trocken, gebe Warnung aus "zu trocken" (und schalte Pumpe ein)
Wenn zu nass, gebe Warnung aus "zu nass" (und schalte Pumpe aus)
Wenn im Giessbereich, gebe aus "jetzt giessen" (und schalte Pumpe ein)
Wenn Pumpe ein, mache die nach xx sekunden aus
Fange an von vorn.

Richtig, genau das und das macht mein Programm ja auch.
Der "Grundsketch" liegt bei....

giessanlage_offline.ino (3.74 KB)

Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Du hast neben der Codetagfrage noch zuviele Klammern.
Zeile 32 - mit entsprechendem Ende und 68 mit entsprechendem Ende.

Ich schau nachher drüber.

Vorher war ab Zeile 130:

             client.println("</span></td></tr></table>");
            }
            /*************************************************************************************************************************************************************************/
            reset();

Solltest Du den noch haben, dann nimm mal da das reset(); weg und probiers erneut.

Hi Tommy

Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.

Mach ich gleich mal Postwendend

Du hast neben der Codetagfrage noch zuviele Klammern.
Zeile 32 - mit entsprechendem Ende und 68 mit entsprechendem Ende.

Kann ich nicht unbedingt so bestätigen, laut HTML-codes gehören die Klammern immer dort hin außer es gibt noch einen HTML-Befehl den ich noch nicht kenne welcher mir die Klammern erspart.
Auf meiner eigenen Homepage kenne ich keine andere Schreibweise....

Ich hab aber gerade noch meinen ursprünlichen Code gefunden welchen ich auf einen Arduino Uno eingespielt habe. Ist ähnlich aufgebaut, aber komplett ohne reset und funktioniert ebenso auf dem ESP32.

/*
        Getestet und Programmiert auf einen Arduino Nano  (analogWrite)
        Getestet und Programmiert auf einen ESP32 DEV  (digitalWrite)
*/

#define BLUE_LED 18                                                        /* PIN für die blaue LED */
#define RED_LED 19                                                        /* PIN für die rote LED */
#define Pumpe_1 23                                                         /* PIN für die grüne LED */
#define Pumpe_2 17
#define SENSOR1_PIN 36                                                    /* PIN für den Bodenfeuchtesensor */
#define SENSOR2_PIN 39
int FeuchteSensor1_Value = 0;                                             /* Variable für den Sensorwert */
int FeuchteSensor2_Value = 0; 

void setup()
{
  Serial.begin(115200);                                                   /* Begin der Seriellenkommunikation */
  pinMode(BLUE_LED, OUTPUT);                                              /* Setzt den PIN für die blaue LED als Ausgang. */
  pinMode(RED_LED, OUTPUT);                                               /* Setzt den PIN für die rote LED als Ausgang. */
  pinMode(Pumpe_1, OUTPUT);                                               /* Setzt den PIN für die Pumpe_1 als Ausgang. */
  pinMode(Pumpe_2, OUTPUT);
}
void loop()

{
  Serial.println(FeuchteSensor1_Value);
  FeuchteSensor1_Value = getSensorValue1_Value();
  Serial.println(FeuchteSensor2_Value);
  FeuchteSensor2_Value = getSensorValue2_Value();

  /*Sensor 1 */
  if (FeuchteSensor1_Value >= 0 && FeuchteSensor1_Value <= 1998)           /* unterer Grenzwert (zu nass) */
  {
    Serial.println("An Sensor 1 ist es ist zu nass");
    digitalWrite(RED_LED, 255);
    digitalWrite(Pumpe_1, 0);
    digitalWrite(BLUE_LED, 0);
  }
  else if (FeuchteSensor1_Value >= 1999 && FeuchteSensor1_Value <= 2099)    /* Grenzwert i.O. (nicht zu nass und auch nicht zu trocken) */
  {
    if (millis() % 20000 < 5000)                                          /* Timer mit 20 Sekunden. Die Pumpe wird dann bei bedarf für 5 Sekunden eingeschaltet  */
    {
      Serial.println("Pflanze 1 Giessen");
      digitalWrite(Pumpe_1, 255);
      digitalWrite(BLUE_LED, 0);
      digitalWrite(RED_LED, 0);
    }
  }
  else if (FeuchteSensor1_Value >= 2100)                                   /* oberer Grenzwert (zu trocken) */
  {
    Serial.println("An Sensor 1 ist es zu trocken");
    digitalWrite(RED_LED, 0);
    digitalWrite(Pumpe_1, 0);
    digitalWrite(BLUE_LED, 255);
  }

  /* Sensor 2 */
  if (FeuchteSensor2_Value >= 0 && FeuchteSensor2_Value <= 1998)           /* unterer Grenzwert (zu nass) */
  {
    Serial.println("An Sensor 2 ist es ist zu nass");
    digitalWrite(RED_LED, 255);
    digitalWrite(Pumpe_2, 0);
    digitalWrite(BLUE_LED, 0);
  }
  else if (FeuchteSensor2_Value >= 1999 && FeuchteSensor2_Value <= 2099)    /* Grenzwert i.O. (nicht zu nass und auch nicht zu trocken) */
  {
    if (millis() % 20000 < 5000)                                          /* Timer mit 20 Sekunden. Die Pumpe wird dann bei Bedarf für 5 Sekunden eingeschaltet  */
    {
      Serial.println("Pflanze 2 Giessen");
      digitalWrite(Pumpe_2, 255);
      digitalWrite(BLUE_LED, 0);
      digitalWrite(RED_LED, 0);
    }
  }
  else if (FeuchteSensor2_Value >= 2100)                                   /* oberer Grenzwert (zu trocken) */
  {
    Serial.println("An Sensor 2 ist es zu trocken");
    digitalWrite(RED_LED, 0);
    digitalWrite(Pumpe_2, 0);
    digitalWrite(BLUE_LED, 255);
  }
  delay(1000);                                                            /* Pause für 1 Sekunde. */
}

int getSensorValue1_Value()                                               /* Liest den Wert des Bodenfeuchtesensors und gibt diesen zurück. */
{
  return analogRead(SENSOR1_PIN);
}
int getSensorValue2_Value()
{
  return analogRead(SENSOR2_PIN);
}

Um Missverständnisse auszuschliessen:
Ich beziehe mich - auch zukünftig - auf Deinen Sketch in #15 bzw. meinen hier jetzt.
Änderungen gebe ich an.

Somit ist die html-Geschichte schon mal raus :wink:
Die Klammern sind zuviel.

Du hast im loop() am Ende noch das reset() drin.
Das heisst, das bei jedem Durchlauf der reset(); ausgeführt wird.
Somit wird am Ende von loop() jegliche Pumpenstellung IMMER auf LOW gezogen.

Nur um mich nicht vom SOLL zu entfernen: Was hast Du denn für eine Pumpenlogik?
Schaltet die Pumpe EIN wenn Pumpe_x=LOW (negative Logik) oder EIN wenn Pumpe_x=HIGH (positive Logik)

Und hier der von Dir zur Verfügung gestellte Sketch, den ich auf das Mindestmaß gekürzt habe und nur die PIN_Variablen geändert und zusätzlich die Umschaltwerte als const festgelegt habe. Und die bool auch.
Die deklinierten Variablen sind erstmal drin geblieben - Bitte drüber lesen; Wenn ich was falsch eingekürzt habe, sag Bescheid.

/*
   Dieser Sketch ist angepasst auf MEGA
   Für ESP PIN's wieder anpassen
*/

const int Sensor_1_Pin = A0;
const int Sensor_2_Pin = A1;
const int Pumpe_1 = 48;
const int Pumpe_2 = 46;

// Neu eingefügt. Werte sind anzupassen
const int nass = 75;
const int trocken = 175 ;

int Sensor_1_Wert = 0;        /* Variable, die den gelesenen Wert speichert  */
int Sensor_2_Wert = 0;
bool Pumpe_1_Status = LOW;
bool Pumpe_2_Status = LOW;

// const int ledBlau = 18;
// const int ledRot = 19;

// String header;

void setup()
  {
  Serial.begin(115200);       /* Setup der seriellen Verbindung   */
  pinMode(Pumpe_1, OUTPUT);
  pinMode(Pumpe_2, OUTPUT);
  }

void loop()
  {
  /*    Arbeitsbereich Sensor 1 und Pumpe 1   */
  if (millis() % 8000 < 5000)  /*   Timer von 8 Sekunden Led's werden für 5 Sekunden eingeschaltet  */
    {
    Sensor_1_Wert = analogRead(Sensor_1_Pin); // Pin einlesen
    Serial.println(Sensor_1_Wert); // Wert ausgeben
    if (Sensor_1_Wert <= nass)
      {
      digitalWrite(Pumpe_1, LOW);
      Serial.println("Dem Sensor 1 ist es zu feucht");
      }
    else if (Sensor_1_Wert > nass && Sensor_1_Wert < trocken)
      {
      digitalWrite(Pumpe_1, HIGH);
      Serial.println("Giessbereich, Pumpe 1 ist eingeschaltet");
      }
    else if (Sensor_1_Wert >= trocken)
      {
      digitalWrite(Pumpe_1, HIGH);
      Serial.println("Dem Sensor 1 ist es zu trocken");
      }
    }
  reset();
  }
void reset()
  {
  digitalWrite(Pumpe_1, 0);
  digitalWrite(Pumpe_2, 0);
  }