Files
PumpStateMachine/PumpStateMachine.ino

84 lines
2.0 KiB
C++

#include <StateMachine.h>
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;
}