Ivan Vengust / Mbed 2 deprecated Led_fsm

Dependencies:   mbed

Committer:
vitrzin
Date:
Thu Oct 14 10:45:17 2010 +0000
Revision:
0:2b4bd6078ce3

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }