Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:2b4bd6078ce3, 2010-10-14 (annotated)
- Committer:
- vitrzin
- Date:
- Thu Oct 14 10:45:17 2010 +0000
- Revision:
- 0:2b4bd6078ce3
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| vitrzin | 0:2b4bd6078ce3 | 1 | /********************************************************************* |
| vitrzin | 0:2b4bd6078ce3 | 2 | led_fsm first mbed (lpc1768) program |
| vitrzin | 0:2b4bd6078ce3 | 3 | Simple finite state machine for |
| vitrzin | 0:2b4bd6078ce3 | 4 | mbed's onboard LEDs sequencing |
| vitrzin | 0:2b4bd6078ce3 | 5 | |
| vitrzin | 0:2b4bd6078ce3 | 6 | author: Ivan Vengust 'vitrzin' |
| vitrzin | 0:2b4bd6078ce3 | 7 | last change: 14. oct. 2010 |
| vitrzin | 0:2b4bd6078ce3 | 8 | *********************************************************************/ |
| vitrzin | 0:2b4bd6078ce3 | 9 | #include "mbed.h" |
| vitrzin | 0:2b4bd6078ce3 | 10 | |
| vitrzin | 0:2b4bd6078ce3 | 11 | // Function prototypes |
| vitrzin | 0:2b4bd6078ce3 | 12 | int fsm(void); |
| vitrzin | 0:2b4bd6078ce3 | 13 | int fsm1(void); |
| vitrzin | 0:2b4bd6078ce3 | 14 | |
| vitrzin | 0:2b4bd6078ce3 | 15 | // Global variables |
| vitrzin | 0:2b4bd6078ce3 | 16 | DigitalOut led1(LED1); |
| vitrzin | 0:2b4bd6078ce3 | 17 | DigitalOut led2(LED2); |
| vitrzin | 0:2b4bd6078ce3 | 18 | DigitalOut led3(LED3); |
| vitrzin | 0:2b4bd6078ce3 | 19 | DigitalOut led4(LED4); |
| vitrzin | 0:2b4bd6078ce3 | 20 | |
| vitrzin | 0:2b4bd6078ce3 | 21 | // main ************************************************************ |
| vitrzin | 0:2b4bd6078ce3 | 22 | int main() |
| vitrzin | 0:2b4bd6078ce3 | 23 | { |
| vitrzin | 0:2b4bd6078ce3 | 24 | int c(0), status; |
| vitrzin | 0:2b4bd6078ce3 | 25 | |
| vitrzin | 0:2b4bd6078ce3 | 26 | while(1) |
| vitrzin | 0:2b4bd6078ce3 | 27 | { |
| vitrzin | 0:2b4bd6078ce3 | 28 | if (c > 2) // decide which sequence |
| vitrzin | 0:2b4bd6078ce3 | 29 | status = fsm1(); // call sequence change |
| vitrzin | 0:2b4bd6078ce3 | 30 | else |
| vitrzin | 0:2b4bd6078ce3 | 31 | status = fsm(); |
| vitrzin | 0:2b4bd6078ce3 | 32 | |
| vitrzin | 0:2b4bd6078ce3 | 33 | if (status == 0) |
| vitrzin | 0:2b4bd6078ce3 | 34 | { |
| vitrzin | 0:2b4bd6078ce3 | 35 | c = ++c % 5; // count finished sequences |
| vitrzin | 0:2b4bd6078ce3 | 36 | } |
| vitrzin | 0:2b4bd6078ce3 | 37 | } |
| vitrzin | 0:2b4bd6078ce3 | 38 | } |
| vitrzin | 0:2b4bd6078ce3 | 39 | |
| vitrzin | 0:2b4bd6078ce3 | 40 | /********************************************************************** |
| vitrzin | 0:2b4bd6078ce3 | 41 | fsm() Simple finite state machine |
| vitrzin | 0:2b4bd6078ce3 | 42 | Each call to 'fsm' will advance state machine to next state |
| vitrzin | 0:2b4bd6078ce3 | 43 | return value: current state |
| vitrzin | 0:2b4bd6078ce3 | 44 | **********************************************************************/ |
| vitrzin | 0:2b4bd6078ce3 | 45 | int fsm(void) // light each led on turn - 4 states |
| vitrzin | 0:2b4bd6078ce3 | 46 | { |
| vitrzin | 0:2b4bd6078ce3 | 47 | static int st(0); // sequence state |
| vitrzin | 0:2b4bd6078ce3 | 48 | const int dly(200); // base delay - 200 ms |
| vitrzin | 0:2b4bd6078ce3 | 49 | |
| vitrzin | 0:2b4bd6078ce3 | 50 | switch(st) |
| vitrzin | 0:2b4bd6078ce3 | 51 | { |
| vitrzin | 0:2b4bd6078ce3 | 52 | case 0: // state 0 |
| vitrzin | 0:2b4bd6078ce3 | 53 | led4 = 0; // change leds |
| vitrzin | 0:2b4bd6078ce3 | 54 | led3 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 55 | led2 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 56 | led1 = 1; |
| vitrzin | 0:2b4bd6078ce3 | 57 | wait_ms(dly*3); // wait longer in initial state |
| vitrzin | 0:2b4bd6078ce3 | 58 | ++st; // switch to next state |
| vitrzin | 0:2b4bd6078ce3 | 59 | break; |
| vitrzin | 0:2b4bd6078ce3 | 60 | case 1: // state 1 |
| vitrzin | 0:2b4bd6078ce3 | 61 | led1 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 62 | led2 = 1; |
| vitrzin | 0:2b4bd6078ce3 | 63 | ++st; |
| vitrzin | 0:2b4bd6078ce3 | 64 | break; |
| vitrzin | 0:2b4bd6078ce3 | 65 | case 2: // state 2 |
| vitrzin | 0:2b4bd6078ce3 | 66 | led2 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 67 | led3 = 1; |
| vitrzin | 0:2b4bd6078ce3 | 68 | ++st; |
| vitrzin | 0:2b4bd6078ce3 | 69 | break; |
| vitrzin | 0:2b4bd6078ce3 | 70 | case 3: // state 3 |
| vitrzin | 0:2b4bd6078ce3 | 71 | led3 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 72 | led4 = 1; |
| vitrzin | 0:2b4bd6078ce3 | 73 | st=0; // switch to initial state |
| vitrzin | 0:2b4bd6078ce3 | 74 | break; |
| vitrzin | 0:2b4bd6078ce3 | 75 | } |
| vitrzin | 0:2b4bd6078ce3 | 76 | wait_ms(dly); |
| vitrzin | 0:2b4bd6078ce3 | 77 | return st; |
| vitrzin | 0:2b4bd6078ce3 | 78 | } |
| vitrzin | 0:2b4bd6078ce3 | 79 | |
| vitrzin | 0:2b4bd6078ce3 | 80 | int fsm1(void) // light led column - 8 states |
| vitrzin | 0:2b4bd6078ce3 | 81 | { |
| vitrzin | 0:2b4bd6078ce3 | 82 | static int st(0); // sequence state |
| vitrzin | 0:2b4bd6078ce3 | 83 | const int dly(400); // base delay - 200 ms |
| vitrzin | 0:2b4bd6078ce3 | 84 | |
| vitrzin | 0:2b4bd6078ce3 | 85 | switch(st) |
| vitrzin | 0:2b4bd6078ce3 | 86 | { |
| vitrzin | 0:2b4bd6078ce3 | 87 | case 0: // state 0 |
| vitrzin | 0:2b4bd6078ce3 | 88 | led4 = 0; // change leds |
| vitrzin | 0:2b4bd6078ce3 | 89 | led3 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 90 | led2 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 91 | led1 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 92 | wait_ms(dly*2); // wait longer in initial state |
| vitrzin | 0:2b4bd6078ce3 | 93 | ++st; // switch to next state |
| vitrzin | 0:2b4bd6078ce3 | 94 | break; |
| vitrzin | 0:2b4bd6078ce3 | 95 | case 1: // state 1 |
| vitrzin | 0:2b4bd6078ce3 | 96 | led4 = 1; |
| vitrzin | 0:2b4bd6078ce3 | 97 | ++st; |
| vitrzin | 0:2b4bd6078ce3 | 98 | break; |
| vitrzin | 0:2b4bd6078ce3 | 99 | case 2: // state 2 |
| vitrzin | 0:2b4bd6078ce3 | 100 | led3 = 1; |
| vitrzin | 0:2b4bd6078ce3 | 101 | ++st; |
| vitrzin | 0:2b4bd6078ce3 | 102 | break; |
| vitrzin | 0:2b4bd6078ce3 | 103 | case 3: // state 3 |
| vitrzin | 0:2b4bd6078ce3 | 104 | led2 = 1; |
| vitrzin | 0:2b4bd6078ce3 | 105 | ++st; |
| vitrzin | 0:2b4bd6078ce3 | 106 | break; |
| vitrzin | 0:2b4bd6078ce3 | 107 | case 4: // state 4 |
| vitrzin | 0:2b4bd6078ce3 | 108 | led1 = 1; |
| vitrzin | 0:2b4bd6078ce3 | 109 | ++st; |
| vitrzin | 0:2b4bd6078ce3 | 110 | break; |
| vitrzin | 0:2b4bd6078ce3 | 111 | case 5: // state 5 |
| vitrzin | 0:2b4bd6078ce3 | 112 | led1 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 113 | ++st; |
| vitrzin | 0:2b4bd6078ce3 | 114 | break; |
| vitrzin | 0:2b4bd6078ce3 | 115 | case 6: // state 6 |
| vitrzin | 0:2b4bd6078ce3 | 116 | led2 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 117 | ++st; |
| vitrzin | 0:2b4bd6078ce3 | 118 | break; |
| vitrzin | 0:2b4bd6078ce3 | 119 | case 7: // state 7 |
| vitrzin | 0:2b4bd6078ce3 | 120 | led3 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 121 | ++st; |
| vitrzin | 0:2b4bd6078ce3 | 122 | break; |
| vitrzin | 0:2b4bd6078ce3 | 123 | case 8: // state 8 |
| vitrzin | 0:2b4bd6078ce3 | 124 | led4 = 0; |
| vitrzin | 0:2b4bd6078ce3 | 125 | st=0; // switch to initial state |
| vitrzin | 0:2b4bd6078ce3 | 126 | break; |
| vitrzin | 0:2b4bd6078ce3 | 127 | } |
| vitrzin | 0:2b4bd6078ce3 | 128 | wait_ms(dly); |
| vitrzin | 0:2b4bd6078ce3 | 129 | return st; |
| vitrzin | 0:2b4bd6078ce3 | 130 | } |