diff --git a/Fsm.cpp b/Fsm.cpp index b0562e6..2b83a3b 100644 --- a/Fsm.cpp +++ b/Fsm.cpp @@ -38,7 +38,7 @@ Fsm::~Fsm() } -void Fsm::add_transition(State* state_from, State* state_to, String event, +void Fsm::add_transition(State* state_from, State* state_to, int event, void (*on_transition)()) { if (state_from == NULL || state_to == NULL) @@ -57,7 +57,7 @@ void Fsm::add_transition(State* state_from, State* state_to, String event, } -void Fsm::trigger(String event) +void Fsm::trigger(int event) { // Find the transition with the current state and given event. Transition transition; diff --git a/Fsm.h b/Fsm.h index f28f027..2c23a88 100644 --- a/Fsm.h +++ b/Fsm.h @@ -39,16 +39,16 @@ class Fsm Fsm(State* initial_state); ~Fsm(); - void add_transition(State* state_from, State* state_to, String event, + void add_transition(State* state_from, State* state_to, int event, void (*on_transition)()); - void trigger(String event); + void trigger(int event); private: struct Transition { State* state_from; State* state_to; - String event; + int event; void (*on_transition)(); }; diff --git a/README.md b/README.md index 78bf29a..f464fda 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ feature branch. * Add library.properties * Add keywords.txt * Remove name attribute from state +* Use int for transition event instead of string **1.0.0 - 24/12/2013** diff --git a/examples/light_switch/light_switch.ino b/examples/light_switch/light_switch.ino index 1a9d52b..ac7d1c3 100644 --- a/examples/light_switch/light_switch.ino +++ b/examples/light_switch/light_switch.ino @@ -1,5 +1,13 @@ #include +// State machine variables +#define FLIP_LIGHT_SWITCH 1 + +State state_light_on(on_light_on_enter, &on_light_on_exit); +State state_light_off(on_light_off_enter, &on_light_off_exit); +Fsm fsm(&state_light_off); + +// Transition callback functions void on_light_on_enter() { Serial.println("Entering LIGHT_ON"); @@ -30,24 +38,23 @@ void on_trans_light_off_light_on() Serial.println("Transitioning from LIGHT_OFF to LIGHT_ON"); } -State state_light_on(on_light_on_enter, &on_light_on_exit); -State state_light_off(on_light_off_enter, &on_light_off_exit); -Fsm fsm(&state_light_off); - +// standard arduino functions void setup() { Serial.begin(9600); - fsm.add_transition(&state_light_on, &state_light_off, "flip_switch", + fsm.add_transition(&state_light_on, &state_light_off, + FLIP_LIGHT_SWITCH, &on_trans_light_on_light_off); - fsm.add_transition(&state_light_off, &state_light_on, "flip_switch", + fsm.add_transition(&state_light_off, &state_light_on, + FLIP_LIGHT_SWITCH, &on_trans_light_off_light_on); } void loop() { delay(2000); - fsm.trigger("flip_switch"); + fsm.trigger(FLIP_LIGHT_SWITCH); delay(2000); - fsm.trigger("flip_switch"); + fsm.trigger(FLIP_LIGHT_SWITCH); }