struct ValveType {
unsigned long LastMillis = 0;
unsigned long interval = 150;
unsigned long onTime = 150;
unsigned long offTime = 400;
unsigned long offSet = 0;
boolean isOn = false;
int Pin;
};
const int NoOfValves = 2;
ValveType Valve[NoOfValves];
void SwitchIntervalOfValve(int No){
if (Valve[No].isOn) Valve[No].interval = Valve[No].onTime + Valve[No].offSet;
else Valve[No].interval = Valve[No].offTime+ Valve[No].offSet;
}
void SetValve(int No, int State) {
Valve[No].isOn = State;
SwitchIntervalOfValve(No);
digitalWrite(Valve[No].Pin, Valve[No].isOn);
}
void InitValve(int No, int State, unsigned long offset = 0) {
Valve[No].offSet = offset;
SetValve(No, State);
}
void SwitchValveNo(int No, unsigned long now) {
if (now - Valve[No].LastMillis > Valve[No].interval) {
Valve[No].LastMillis = now;
Valve[No].isOn = !Valve[No].isOn;
SetValve(No, Valve[No].isOn);
}
}
void SwitchValves() {
unsigned long now = millis();
for (int i = 0; i < NoOfValves; i++ ) SwitchValveNo(i, now);
}
void setup() {
Serial.begin(115200);
// Just a quick initialization
for (int i = 0; i < NoOfValves; i++ ) {
Valve[i].Pin = 9 + i; // Only valid for max. 5 "Valves" = Leds, as 9 + 4 = 13 (Pin 13)
pinMode(Valve[i].Pin, OUTPUT);
}
InitValve(0,LOW,0);
InitValve(1,LOW,200);
}
void loop() {
SwitchValves();
}