Craig Evans / Mbed 2 deprecated ELEC2645_FSM_Puffin

Dependencies:   mbed

Committer:
eencae
Date:
Wed Dec 20 13:06:03 2017 +0000
Revision:
3:818317dbe8a5
Parent:
2:299c10699314
Child:
4:b6e9d473ce0e
Updated mbed library and modified pins and outputs for Gamepad.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:32827ba075c9 1 /*
eencae 0:32827ba075c9 2
eencae 0:32827ba075c9 3 2645_FSM_Puffin
eencae 0:32827ba075c9 4
eencae 3:818317dbe8a5 5 Sample code from ELEC2645
eencae 0:32827ba075c9 6
eencae 0:32827ba075c9 7 Demonstrates how to implement a puffin crossing using a FSM
eencae 0:32827ba075c9 8
eencae 0:32827ba075c9 9 (c) Craig A. Evans, University of Leeds, Jan 2016
eencae 0:32827ba075c9 10
eencae 0:32827ba075c9 11 */
eencae 0:32827ba075c9 12
eencae 0:32827ba075c9 13 #include "mbed.h"
eencae 0:32827ba075c9 14
eencae 0:32827ba075c9 15 // K64F on-board LEDs
eencae 0:32827ba075c9 16 DigitalOut r_led(LED_RED);
eencae 0:32827ba075c9 17 DigitalOut g_led(LED_GREEN);
eencae 0:32827ba075c9 18 DigitalOut b_led(LED_BLUE);
eencae 0:32827ba075c9 19
eencae 0:32827ba075c9 20 // LEDs to display traffic light output
eencae 3:818317dbe8a5 21 // May need to change pins depending on which order you soldered the LEDs
eencae 0:32827ba075c9 22 // LSB MSB
eencae 0:32827ba075c9 23 // car - green,amber, red pedestrian - green, red
eencae 3:818317dbe8a5 24 BusOut output(PTC2,PTA2,PTA1,PTD3,PTC3); // LED order suggested in notes
eencae 3:818317dbe8a5 25
eencae 0:32827ba075c9 26 // BusIn to read inputs simutaneously
eencae 3:818317dbe8a5 27 // camera (button A) , pedestrian button (button B)
eencae 3:818317dbe8a5 28 // LSB, MSB
eencae 3:818317dbe8a5 29 BusIn input(PTB9,PTD0);
eencae 0:32827ba075c9 30
eencae 0:32827ba075c9 31 // struct for state
eencae 0:32827ba075c9 32 struct State {
eencae 0:32827ba075c9 33 int output; // output value
eencae 0:32827ba075c9 34 float time; // time in state
eencae 0:32827ba075c9 35 int nextState[4]; // array of next states
eencae 0:32827ba075c9 36 };
eencae 0:32827ba075c9 37
eencae 2:299c10699314 38 State fsm[4] = {
eencae 3:818317dbe8a5 39 {0x13,5.0,{...,...,...,...}}, // 0 - cars stop, pedestrian walk 5 seconds
eencae 1:b6df1b5309e7 40 {...,2.0,{2,2,2,2}}, // 1 - cars get ready to go, pedestrian stop 2 seconds
eencae 1:b6df1b5309e7 41 {...,10.0,{...,...,...,...}}, // 2 - cars go, pedestrian stop 10 seconds
eencae 1:b6df1b5309e7 42 {...,2.0,{0,0,0,0}} // 3 - cars get ready to stop, pedestrian stop 2 seconds
eencae 0:32827ba075c9 43 };
eencae 0:32827ba075c9 44
eencae 0:32827ba075c9 45 int main()
eencae 0:32827ba075c9 46 {
eencae 0:32827ba075c9 47 // on-board LEDs are active-low, so set pin high to turn them off.
eencae 0:32827ba075c9 48 r_led = 1;
eencae 0:32827ba075c9 49 g_led = 1;
eencae 0:32827ba075c9 50 b_led = 1;
eencae 0:32827ba075c9 51
eencae 3:818317dbe8a5 52 // turn on internal pull-downs for buttons A and B
eencae 3:818317dbe8a5 53 input.mode(PullDown);
eencae 0:32827ba075c9 54
eencae 0:32827ba075c9 55 int state = 2; // start with cars green
eencae 0:32827ba075c9 56
eencae 0:32827ba075c9 57 while(1) {
eencae 0:32827ba075c9 58 output = fsm[state].output; // set ouput depending on current state
eencae 0:32827ba075c9 59 wait(fsm[state].time); // wait in that state for desired time
eencae 0:32827ba075c9 60 state = fsm[state].nextState[input]; // read input (BusIn) and update curent state
eencae 0:32827ba075c9 61 }
eencae 0:32827ba075c9 62 }