Hallo currymuetze
"Und ewig grüßet das Murmeltier."
Ja, dieser Spagetti-Code mit den switch-case schleife ist nicht die beste Art zu programmieren.
Ja, theoretisch könnte die Schleife durch das ewig gleiche Ergebnis hängen bleiben, aber die Random-Funktion ist ja so programmiert, daß sie zufällige Zahlen gibt die im gesamten gesehen möglichst gleichmäßig auf den gesamten Wertebereich aufgeteilt ist. Um da signifikante Zeiten herauskommen (einige Sekunden bis Minuten) muß schon einige hundert bis 1000 mal die gleiche Zahl hintereinender herauskommen und das ist unwahrscheinlich bis unmöglich.
Falls das wirklich passiert (daß eine Zahl immer wieder herauskommt) bleibt das Programm in dieser Schleife und es gehen konstant 3 Pumpen. Deshalb habe ich auch so programmiert daß zuerst alle pumpen eingeschaltet werden und dann die Zufallsfunktion die Pumpen ausschaltet und nicht zuerst alle ausschalten und dann einige einschalten.
Natürlich kann man einen Zähler einbauen und kontrollieren ob die Schleife zB 10 mal durchläuft ohne zu einen Ergebnis zu kommen und diesem Fall die Schleife abbricht und 2 Pumpen per default setzt.
int wiederholungen =0;
...
wiederholungen =0;
for (int j=4; j>NrPumpenEin; j--)
{
k = random(4);
if (digitalRead(PumpenAusgang[k]) == HIGH)
{
digitalWrite(PumpenAusgang[k], LOW);
Serial.print (" Pumpe NR "); Serial.print (PumpenAusgang[k],DEC); Serial.print (" AUS; ");
}
else
{
j++;
}
wiederholungen++;
if(wiederholungen>=10)
{
digitalWrite(PumpenAusgang[0], LOW);
digitalWrite(PumpenAusgang[1], LOW);
}
}
vorher = millis();
Serial.println ();
}
Die Gefahr einer Fehlfunktion ist da sehr wahrscheinlicher imFalls sich das System blockieren sollte ist es sehr wahrscheilicher daß es am Blockieren des Arduino, am Blockieren der Pumpe, am Fehlen der Netzspannung durch einen Schaden in der Energieverteilung; am Auslösen des FI-schutzes oder Magnetothermischen Sicherung in Verteiler des Hauses/Wohnung durch eine Schaden an einem anderen Gerät ecc. liegen wird.
Viele Grüße Uwe