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@3:818317dbe8a5, 2017-12-20 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |