Hallo Forum,
ich bin noch ein ziemlicher Neuling und bitte darum, dass ihr mir vielleicht ein paar Tipps geben könnte.
Ich habe eine Bewässerung gebastelt und programmiert, die im Grunde so funktioniert, wie ich es möchte.
Was jetzt noch dazu kam, war eine Sicherung des Wasserstandes im Behälter, damit die Pumpen nicht leer laufen. Dafür habe ich einen Schwimmschalter und eine LED, die anzeigen soll, wenn der Behälter leer ist.
Gedacht war, das bei geschlossenem Schwimmschalter die LED leuchtet und das Programm nicht zur Prüfung der Messwerte übergeht, bzw. die Relais abfallen, solange der Schwimmschalter geschlossen bleibt.
Beim momentanen Code ziehen bei geschlossenem Schwimmschalter, alle drei Relais (die Pumpen laufen) und die LED leuchtet so lange, wie der Schalter geschlossen ist. Ist der Schalter offen, erlischt die LED und die Relais fallen ab.
Was mache ich falsch? :-/
#define SENSORA 0
#define SENSORB 1
#define SENSORC 2
#define RELAISA 2
#define RELAISB 3
#define RELAISC 4
#define SWIM 6
#define LED 7
#define WERTH 370
#define WERTL 360
boolean RelaiszustandA = true;
boolean RelaiszustandB = true;
boolean RelaiszustandC = true;
void setup() {
pinMode(RELAISA, OUTPUT);
pinMode(RELAISB, OUTPUT);
pinMode(RELAISC, OUTPUT);
pinMode(SWIM, INPUT_PULLUP);
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
while(digitalRead(SWIM) == 0)
{
digitalWrite(LED, HIGH);
}
digitalWrite(LED, LOW);
{
//Pflanze1
if((analogRead(SENSORA) < WERTL)&&(RelaiszustandA==LOW)) //Sensor wird abgefragt und wenn der Wert unter 370 ist UND das Relais gezogen ist, fällt es ab
RelaiszustandA = true; //Pumpe aus
if((analogRead(SENSORA) > WERTH)&&(RelaiszustandA==HIGH)) //Sensor wird abgefragt und wenn der Wert über 450 ist UND das Relais nicht gezogen ist, zieht es an
RelaiszustandA = false; //Pumpe an
digitalWrite(RELAISA, RelaiszustandA); //Ausgang wird angesteuert
Serial.print(" Sensor 1: ");
Serial.println(analogRead(SENSORA));
//Pflanze2
if((analogRead(SENSORB) < WERTL)&&(RelaiszustandB==LOW))
RelaiszustandB = true; //Relais aus
if((analogRead(SENSORB) > WERTH)&&(RelaiszustandB==HIGH))
RelaiszustandB = false;
digitalWrite(RELAISB, RelaiszustandB);
Serial.print(" Sensor 2: ");
Serial.println(analogRead(SENSORB));
//Pflanze3
if((analogRead(SENSORC) < WERTL)&&(RelaiszustandC==LOW))
RelaiszustandC = true; //Relais aus
if((analogRead(SENSORC) > WERTH)&&(RelaiszustandC==HIGH))
RelaiszustandC = false;
digitalWrite(RELAISC, RelaiszustandC);
Serial.print(" Sensor 3: ");
Serial.println(analogRead(SENSORC));
Serial.println();
//Wenn eines der Relais gezogen ist, wird jede Sekunde die Messung wiederholt. Wenn keines gezogen ist, wird alle 30 Min gemessen
if((RelaiszustandA==LOW)||(RelaiszustandB==LOW)||(RelaiszustandC==LOW))
{
delay(1000);
} else {
delay(1800000);
}
}
}