Zeitliche Steuerung

Hallo zusammen,

ich hoffe Ihr habt ein wenig nachsehen mit einem Programmier-Anfänger... habe bereits Google und diverse Foren durchsucht aber komme nicht zum richtigen Ergebnis

Ich habe mir eine kleine Schaltung aufgebaut die über die Analogen Eingänge des ARDUINO NANO die Feuchtigkeit im Boden Messen sollen.

Ist ein bestimmter Wert erreicht (trocken) soll über ein Relay eine Pumpe angeschmissen werden.

Soweit hab ich das auch prima hinbekommen in dem ich mir einiges abgucken konnte.

Da der Blumentopf in dem das Testszenario gerade ausgeführt wird nicht überflutet möchte ich die Pumpe zeitlich begrenzen (soll nur 10sekunden Wasser fließen lassen dann kurz Pause machen)

Mit einer Pflanze ist es nicht genug, gerade als Anfänger neigt man gern zur Übertreibung. Ich möchte also 4 Stellen messen und gießen.

Jetzt zu meinem Problem:
Immer wenn die Pumpe pausieren soll, pausiert das gesamte Skript, da ich mit delay gearbeitet habe. Gibt es eine Alternative zu delay und wie baue ich die ggf. ein ?

Hier noch mein Code

#define an 0
#define aus 1
#define relayA 2
#define relayB 3
#define relayC 4
#define relayD 5
int sensorA = 0;
int sensorB = 0;
int sensorC = 0;
int sensorD = 0;

void setup() {
//Bootvorgang
Serial.begin(9600);

digitalWrite(relayA, aus);
digitalWrite(relayB, aus);
digitalWrite(relayC, aus);
digitalWrite(relayD, aus);

pinMode(relayA, OUTPUT);
pinMode(relayB, OUTPUT);
pinMode(relayC, OUTPUT);
pinMode(relayD, OUTPUT);
}
void loop() {

//auslesen des Wertes von Pin A0 und senden an PC
Serial.print("A0 ");
Serial.println(analogRead(A0));
Serial.print("A1 ");
Serial.println(analogRead(A1));
Serial.print("A2 ");
Serial.println(analogRead(A2));
Serial.print("A3 ");
Serial.println(analogRead(A3));
Serial.println();
delay(200);

sensorA = analogRead(A0); // read the input pin
sensorB = analogRead(A1); // read the input pin
sensorC = analogRead(A2); // read the input pin
sensorD = analogRead(A3); // read the input pin

if (sensorA > 500){
digitalWrite(relayA, an);
delay(1000);
digitalWrite(relayA, aus);
delay(360000);
}
else {
digitalWrite(relayA, aus);
}

if (sensorB > 500){
digitalWrite(relayB, an);
delay(1000);
digitalWrite(relayB, aus);
delay(360000);
}
else {
digitalWrite(relayB, aus);
}

if (sensorC > 500){
digitalWrite(relayC, an);
delay(10000);
digitalWrite(relayC, aus);
delay(360000);
}
else {
digitalWrite(relayC, aus);
}

if (sensorD > 500){
digitalWrite(relayD, an);
delay(10000);
digitalWrite(relayD, aus);
delay(360000);
}
else {
digitalWrite(relayD, aus);
}

}

Schau Dir mal das Beispiel BlinkWithoutDelay an :wink:
Ansonsten kann ich auch den Link hier empfehlen, der erklärt das genauer und erweitert das Ganze etwas.....

Backslash83:
... Hier noch mein Code ...

Es wäre schön, wenn Du Deinen Code in Code-Tags fassen würdest. Das kannst Du auch nachträglich tun.

Ansonsten: Auch mein Tipp wäre der mit dem blink-without-delay gewesen.

Gruß

Gregor