Thiago .
/
StateMachine_3
Example and exercise. A FSM with pointers
main.cpp@0:4205137775e5, 2015-05-28 (annotated)
- Committer:
- Jamess
- Date:
- Thu May 28 19:14:02 2015 +0000
- Revision:
- 0:4205137775e5
How to make a FSM (finite state machine) with pointer in C
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jamess | 0:4205137775e5 | 1 | /*****************************************************************/ |
Jamess | 0:4205137775e5 | 2 | /* How to use State Machines in C */ |
Jamess | 0:4205137775e5 | 3 | /* Switch|Case */ |
Jamess | 0:4205137775e5 | 4 | /*****************************************************************/ |
Jamess | 0:4205137775e5 | 5 | |
Jamess | 0:4205137775e5 | 6 | //Librarys: |
Jamess | 0:4205137775e5 | 7 | #include "mbed.h" |
Jamess | 0:4205137775e5 | 8 | |
Jamess | 0:4205137775e5 | 9 | //Configuration: |
Jamess | 0:4205137775e5 | 10 | |
Jamess | 0:4205137775e5 | 11 | DigitalOut myled(LED1); |
Jamess | 0:4205137775e5 | 12 | Serial pc(USBTX,USBRX); |
Jamess | 0:4205137775e5 | 13 | |
Jamess | 0:4205137775e5 | 14 | //Functions: |
Jamess | 0:4205137775e5 | 15 | void SendThings(void); // Sends Something to the computer |
Jamess | 0:4205137775e5 | 16 | void LedON(void); // Turns RED LED ON |
Jamess | 0:4205137775e5 | 17 | void LedOF(void); // Turns RED LED OFF |
Jamess | 0:4205137775e5 | 18 | void PrepThings(void); // Prepares Something |
Jamess | 0:4205137775e5 | 19 | //Function Pointer: |
Jamess | 0:4205137775e5 | 20 | void (*state)()=SendThings;; |
Jamess | 0:4205137775e5 | 21 | |
Jamess | 0:4205137775e5 | 22 | |
Jamess | 0:4205137775e5 | 23 | int main() { |
Jamess | 0:4205137775e5 | 24 | |
Jamess | 0:4205137775e5 | 25 | //State Machine |
Jamess | 0:4205137775e5 | 26 | while(1) { |
Jamess | 0:4205137775e5 | 27 | (*state)(); |
Jamess | 0:4205137775e5 | 28 | wait(1); |
Jamess | 0:4205137775e5 | 29 | } |
Jamess | 0:4205137775e5 | 30 | } |
Jamess | 0:4205137775e5 | 31 | void SendThings(void){ |
Jamess | 0:4205137775e5 | 32 | pc.printf("Sedingthings"); |
Jamess | 0:4205137775e5 | 33 | state=LedON; |
Jamess | 0:4205137775e5 | 34 | } |
Jamess | 0:4205137775e5 | 35 | void LedON(void){ |
Jamess | 0:4205137775e5 | 36 | pc.printf("ON"); |
Jamess | 0:4205137775e5 | 37 | state=LedOF; |
Jamess | 0:4205137775e5 | 38 | } |
Jamess | 0:4205137775e5 | 39 | void LedOF(void){ |
Jamess | 0:4205137775e5 | 40 | pc.printf("OFF"); |
Jamess | 0:4205137775e5 | 41 | state=PrepThings; |
Jamess | 0:4205137775e5 | 42 | } |
Jamess | 0:4205137775e5 | 43 | void PrepThings(void){ |
Jamess | 0:4205137775e5 | 44 | pc.printf("preparing"); |
Jamess | 0:4205137775e5 | 45 | state=SendThings; |
Jamess | 0:4205137775e5 | 46 | } |