Gamepad2

Dependencies:   mbed

Committer:
eencae
Date:
Fri Jan 24 15:16:38 2020 +0000
Revision:
4:b6e9d473ce0e
Parent:
3:818317dbe8a5
Gamepad2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:32827ba075c9 1 /*
eencae 0:32827ba075c9 2 2645_FSM_Puffin
eencae 0:32827ba075c9 3
eencae 3:818317dbe8a5 4 Sample code from ELEC2645
eencae 0:32827ba075c9 5
eencae 0:32827ba075c9 6 Demonstrates how to implement a puffin crossing using a FSM
eencae 0:32827ba075c9 7
eencae 0:32827ba075c9 8 (c) Craig A. Evans, University of Leeds, Jan 2016
eencae 4:b6e9d473ce0e 9 Updated Janaury 2020 for Gamepad2
eencae 0:32827ba075c9 10 */
eencae 0:32827ba075c9 11
eencae 0:32827ba075c9 12 #include "mbed.h"
eencae 0:32827ba075c9 13 // K64F on-board LEDs
eencae 4:b6e9d473ce0e 14 BusOut k64f_leds(LED_RED, LED_GREEN, LED_BLUE);
eencae 0:32827ba075c9 15
eencae 0:32827ba075c9 16 // LEDs to display traffic light output
eencae 0:32827ba075c9 17 // LSB MSB
eencae 0:32827ba075c9 18 // car - green,amber, red pedestrian - green, red
eencae 4:b6e9d473ce0e 19 BusOut output(PTC3,PTC2,PTA2,PTC11,PTA1);
eencae 3:818317dbe8a5 20
eencae 0:32827ba075c9 21 // BusIn to read inputs simutaneously
eencae 3:818317dbe8a5 22 // camera (button A) , pedestrian button (button B)
eencae 3:818317dbe8a5 23 // LSB, MSB
eencae 4:b6e9d473ce0e 24 BusIn input(PTC7,PTC9);
eencae 0:32827ba075c9 25
eencae 0:32827ba075c9 26 // struct for state
eencae 0:32827ba075c9 27 struct State {
eencae 0:32827ba075c9 28 int output; // output value
eencae 0:32827ba075c9 29 float time; // time in state
eencae 0:32827ba075c9 30 int nextState[4]; // array of next states
eencae 0:32827ba075c9 31 };
eencae 0:32827ba075c9 32
eencae 2:299c10699314 33 State fsm[4] = {
eencae 4:b6e9d473ce0e 34 {0x..,5.0,{..,..,..,..}}, // 0 - cars stop, pedestrian walk 5 seconds
eencae 4:b6e9d473ce0e 35 {0x..,2.0,{..,..,..,..}}, // 1 - cars get ready to go, pedestrian stop 2 seconds
eencae 4:b6e9d473ce0e 36 {0x..,10.0,{..,..,..,..}}, // 2 - cars go, pedestrian stop 10 seconds
eencae 4:b6e9d473ce0e 37 {0x..,2.0,{..,..,..,..}} // 3 - cars get ready to stop, pedestrian stop 2 seconds
eencae 0:32827ba075c9 38 };
eencae 0:32827ba075c9 39
eencae 0:32827ba075c9 40 int main()
eencae 0:32827ba075c9 41 {
eencae 4:b6e9d473ce0e 42 k64f_leds = 0b111; // turn off K64F LEDs
eencae 0:32827ba075c9 43
eencae 4:b6e9d473ce0e 44 // turn on internal pull-up for buttons A and B
eencae 4:b6e9d473ce0e 45 input.mode(PullUp);
eencae 0:32827ba075c9 46
eencae 0:32827ba075c9 47 int state = 2; // start with cars green
eencae 0:32827ba075c9 48
eencae 0:32827ba075c9 49 while(1) {
eencae 0:32827ba075c9 50 output = fsm[state].output; // set ouput depending on current state
eencae 0:32827ba075c9 51 wait(fsm[state].time); // wait in that state for desired time
eencae 0:32827ba075c9 52 state = fsm[state].nextState[input]; // read input (BusIn) and update curent state
eencae 0:32827ba075c9 53 }
eencae 0:32827ba075c9 54 }