for (byte b = 0; b> pumpenzahl; ++b)
Die Schleife wird nie ausgeführt.
Denn 0 ist kleiner pumpenanzahl.
Ich kann den Code nicht reparieren, denn er entspricht nicht meinem Stil.
Aber ich kann dir zeigen wie sowas bei mir aussehen könnte.
Ich muss allerdings zugeben, dass dieses Programm aus meiner Wühlkiste stammt, und vermutlich nicht exakt deinen Anforderungen entspricht.
Ziehe daraus, was dir schmeckt, den Rest verwerfe.
Es auch noch nie in der Praxis eingesetzt worden.
Also keine Garantie auf korrekte Funktion.
class Pumpe
{
private:
const byte pumpenPin; // der Pin, an dem die Pumpe hängt
const byte sensorPin; // Bodenfeuchtesensor
int schwellWert; // unterhalb dieses Wertes wird Wasser benötigt
unsigned long pumpZeit; // laufzeit der Pumpe
unsigned long pauseZeit; // mindest Pause zwischen 2 Pumpvorgängen
unsigned long zeitMerker; // interner Merker
void *schritt; // State des endlichen Automaten/ Schrittkette
public:
Pumpe(const byte pumpenPin, const byte sensorPin, const unsigned int schwellWert, const unsigned long pumpZeit, const unsigned long pauseZeit):
pumpenPin(pumpenPin),sensorPin(sensorPin),schwellWert(schwellWert),pumpZeit(pumpZeit),pauseZeit(pauseZeit),zeitMerker(0),schritt(nullptr){}
void begin()
{
digitalWrite(pumpenPin,HIGH); // Relais, low aktiv
pinMode(pumpenPin,OUTPUT);
}
void run()
{
if(!schritt) schritt = &&start;
goto *schritt;
start:
if(analogRead(sensorPin) < schwellWert)
{
schritt = &&pumpen;
zeitMerker = millis();
digitalWrite(pumpenPin,LOW); // Pumpe ein
}
goto ende;
pumpen:
if(millis() - zeitMerker >= pumpZeit)
{
schritt = &&pause;
zeitMerker = millis();
digitalWrite(pumpenPin,HIGH); // Pumpe aus
}
goto ende;
pause:
if(millis() - zeitMerker >= pauseZeit)
{
schritt = &&start; // und wieder von vorne
}
goto ende;
ende:;
}
};
Pumpe pumpen[] { // {pumpenPin, sensorPin, schwellWert, pumpZeit, pauseZeit}
{3,A0,300,10000,50000},
{4,A1,433,10000,50000},
{5,A2,255,10000,50000},
{6,A3,504,10000,50000},
{7,A4,166,10000,50000},
{8,A5,257,10000,50000},
};
void setup()
{
for(Pumpe &p:pumpen) p.begin();
}
void loop()
{
for(Pumpe &p:pumpen) p.run();
}