Thanks for the advice really helping.
I've finally got the switch, case working in sequence as intended now.
next steps I need to look at how to get out of the cycle when both switches are low. I imagine the best way will be with an else if within each switch State. or would this be put in the break; statement?
What I've currently got:
int pump_1 = 3;
int pump_2 = 4;
const int alarm = 2;
int waterLow = 8;
int waterHigh = 9;
const unsigned long pumpInterval = 2000;
const unsigned long alarmInterval = 2000;
unsigned long pumpOnTime;
int lowState = LOW;
int highState = LOW;
int nextState;
int currentState;
//possible states of the state-machine
typedef enum {STATE_IDLE,
STATE_EMPTY,
STATE_RUN1,
STATE_RUN2,
STATE_ALARM} states;
void setup(){
Serial.begin(9600);
nextState = STATE_IDLE;
currentState = nextState;
//set pin modes for each pin:
pinMode(pump_1, OUTPUT);
pinMode(pump_2, OUTPUT);
pinMode(alarm, OUTPUT);
pinMode(waterLow, INPUT_PULLUP);
pinMode(waterHigh, INPUT_PULLUP);
}
void loop(){
const unsigned long currentTime = millis(); // set current time
int tankFull;
tankFull = lowState += highState;
lowState = digitalRead(waterLow);
highState = digitalRead(waterHigh);
switch(currentState){
case STATE_IDLE:
if(tankFull == 2){
Serial.println("tank full");
nextState = STATE_RUN1;
}
break;
case STATE_RUN1:
digitalWrite(pump_1, HIGH);
pumpOnTime = currentTime;
Serial.println("First pump Running");
Serial.println("pump start time: ");
Serial.print(currentTime);
Serial.println(" ");
// if(currentTime - pumpOnTime >= pumpInterval){
nextState = STATE_RUN2;
//}
break;
case STATE_RUN2:
if(currentTime - pumpOnTime >= pumpInterval){
digitalWrite(pump_2, HIGH);
pumpOnTime = currentTime;
Serial.println("Second pump running");
Serial.println("2nd Pump Start Time: ");
Serial.print(pumpOnTime);
nextState = STATE_ALARM;
}
break;
case STATE_ALARM:
if(currentTime - pumpOnTime >= alarmInterval){
digitalWrite(alarm, HIGH);
Serial.println("Alarm on");
Serial.println("Alarm start time:");
Serial.print(currentTime);
Serial.println("");
nextState = STATE_EMPTY;
}
break;
}
currentState = nextState;
}
/* Serial.println(" ");
Serial.print(tankFull);
if(tankFull == 2){
digitalWrite(pump_1, HIGH);
pumpOnTime = currentTime;
Serial.println("First Pump Running");
Serial.println("Pump run time: ");
Serial.println(pumpOnTime);
}else{
digitalWrite(pump_1, LOW);
}*/
