// Define variables
int SW_PIN = 5;
int CircPump_PIN = 10;
long lastTimeBeginOn = 0;
long lastTimeBeginOff = 0;
long lastTimeFinishedInterval = 0;
bool CirPumpOldState = 0;
long TimeToBeOn = 5000;//Time the pump will be on iff it has been off for too long
long MaxTimeOff = 10000;//Max time the pump can be off before turning the pump on
void setup() {
pinMode(SW_PIN, INPUT);
pinMode(CircPump_PIN, OUTPUT);
}
void loop() {
// Check if SW_PIN is high
if(digitalRead(SW_PIN) == HIGH){
// Turn on CircPump_PIN
digitalWrite(CircPump_PIN, HIGH);
}else{
// Maybe turn off CircPump_PIN if no flush cycle needed
if(millis() - lastTimeFinishedInterval > MaxTimeOff){
digitalWrite(CircPump_PIN, HIGH);
}else{
digitalWrite(CircPump_PIN, LOW);
}
}
if(digitalRead(CircPump_PIN) != CirPumpOldState){//Detect when the pump changes state
if(digitalRead(CircPump_PIN)){
lastTimeBeginOn = millis();
}else{
lastTimeBeginOff = millis();
}
CirPumpOldState = digitalRead(CircPump_PIN);
}
if(digitalRead(CircPump_PIN)){//Detect if the pump is turned on
if(millis() - lastTimeBeginOn > TimeToBeOn){//The pump has been on for long enough
lastTimeFinishedInterval = millis();
}
}
}