77 lines
1.9 KiB
Arduino
Raw Normal View History

2018-11-13 08:10:15 +01:00
#include "fsm.h"
using namespace std;
struct Event { int state; };
enum States { AAAA, BBBB, CCCC };
struct QQQQSwitch {
typedef LIST3(AAAA, BBBB, CCCC) StateList;
template <int> int event(Event & ev) { Serial.println("undefined event -- event"); return ev.state; }
template <int> int event() { Serial.println("undefined enter"); return 0; }
template <int> void enter() { Serial.println("undefined enter"); }
template <int> void exit() { Serial.println("undefined leave"); };
template <int> void tick() { Serial.println("undefined enter");}
};
template <> void QQQQSwitch::enter<AAAA>() { Serial.println("enter AAAA"); }
template <> void QQQQSwitch::exit<AAAA>() { Serial.println("exit AAAA"); }
template <> void QQQQSwitch::tick<AAAA>() { Serial.println("tick AAAA"); }
template <> void QQQQSwitch::enter<BBBB>() { Serial.println("enter BBBB"); }
template <> void QQQQSwitch::exit<BBBB>() { Serial.println("exit BBBB"); }
template <> void QQQQSwitch::tick<BBBB>() { Serial.println("tick BBBB"); }
template <> void QQQQSwitch::enter<CCCC>() { Serial.println("enter CCCC"); }
template <> void QQQQSwitch::exit<CCCC>() { Serial.println("exit CCCC"); }
template <> void QQQQSwitch::tick<CCCC>() { Serial.println("tick CCCC"); }
StateMachine<QQQQSwitch>* sm;
Event event_AAAA = {AAAA};
Event event_BBBB = {BBBB};
Event event_CCCC = {CCCC};
void setup() {
Serial.begin(115200);
Serial.println("starts");
QQQQSwitch c;
sm = new StateMachine<QQQQSwitch>(c);
}
void loop() {
delay(2000);
Serial.println("...");
if (Serial.available() > 0) {
char in = (char) Serial.read();
switch(in) {
case 'a':
sm->work(event_AAAA);
return;
case 'b':
sm->work(event_BBBB);
return;
case 'c':
sm->work(event_CCCC);
return;
default:
Serial.println('??');
break;
}
}
sm->tick();
}