#include const int lowTriggerPin = 2; const int highTriggerPin = 3; const int ledPin = 13; // the number of the LED pin const int relay = 7; StateMachine machine = StateMachine(); State* S0 = machine.addState(&state0); // Waiting for trigger State* S1 = machine.addState(&state1); // Pump State* S2 = machine.addState(&state2); // Stop Pump void setup() { Serial.begin(115200); // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the waterlevel sensors pin as an input: pinMode(lowTriggerPin, INPUT); pinMode(highTriggerPin, INPUT); // initialize the relay pin: pinMode(relay, OUTPUT); S0->addTransition(&transitionS0S1,S1); // S0 transition to S1 S1->addTransition(&transitionS1S2,S2); // S1 transition to S2 S2->addTransition(&transitionS2S0,S0); // S2 transition to S0 S2->addTransition(&transitionS2S1,S1); // S2 transition to S1 } void loop() { machine.run(); } void state0(){ Serial.println("State 0"); Serial.println("waiting for trigger"); } bool transitionS0S1(){ if(digitalRead(lowTriggerPin) == HIGH && digitalRead(highTriggerPin) == HIGH){ return true; } // Should never happen... if(digitalRead(lowTriggerPin) == LOW && digitalRead(highTriggerPin) == HIGH){ return true; } return false; } void state1(){ Serial.println("State 1"); Serial.println("Start pumping..."); digitalWrite(ledPin, HIGH); digitalWrite(relay, HIGH); } bool transitionS1S2(){ if(digitalRead(lowTriggerPin) == LOW && digitalRead(highTriggerPin) == LOW){ return true; } return false; } void state2(){ Serial.println("State 1"); Serial.println("Stop pumping..."); digitalWrite(ledPin, LOW); digitalWrite(relay, LOW); } bool transitionS2S0(){ if(digitalRead(lowTriggerPin) == LOW && digitalRead(highTriggerPin) == LOW){ return true; } return false; } bool transitionS2S1(){ if(digitalRead(lowTriggerPin) == HIGH && digitalRead(highTriggerPin) == LOW){ return true; } return false; }