84 lines
2.0 KiB
C++
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;
|
|
}
|