Craig Evans / Mbed 2 deprecated ELEC2645_FSM_Counter

Dependencies:   mbed

Committer:
eencae
Date:
Fri Jan 24 13:18:25 2020 +0000
Revision:
3:aac8dcbe6e18
Parent:
2:bdd8b01141d1
Child:
4:c6d3c2dea4b0
Gamepad2 version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:e8be38c50b44 1 /*
eencae 0:e8be38c50b44 2
eencae 1:81b129bec569 3 2645_FSM_Counter
eencae 0:e8be38c50b44 4
eencae 2:bdd8b01141d1 5 Sample code from ELEC2645
eencae 0:e8be38c50b44 6
eencae 0:e8be38c50b44 7 Demonstrates how to implement a simple FSM counter
eencae 0:e8be38c50b44 8
eencae 0:e8be38c50b44 9 (c) Craig A. Evans, University of Leeds, Jan 2016
eencae 3:aac8dcbe6e18 10 Updated January 2020
eencae 0:e8be38c50b44 11
eencae 0:e8be38c50b44 12 */
eencae 0:e8be38c50b44 13
eencae 0:e8be38c50b44 14 #include "mbed.h"
eencae 0:e8be38c50b44 15
eencae 0:e8be38c50b44 16 // K64F on-board LEDs
eencae 3:aac8dcbe6e18 17 BusOut k64f_leds(LED_RED, LED_GREEN, LED_BLUE);
eencae 3:aac8dcbe6e18 18 // Gamepad switches
eencae 3:aac8dcbe6e18 19 InterruptIn buttonA(PTC7);
eencae 3:aac8dcbe6e18 20 InterruptIn buttonB(PTC9);
eencae 3:aac8dcbe6e18 21 // LEDs on Gamepad (1 to 3) - active-low 0 = on and 1 = off
eencae 3:aac8dcbe6e18 22 // BusOut arguments are LSB first
eencae 3:aac8dcbe6e18 23 BusOut output(PTA2,PTC2,PTC3);
eencae 0:e8be38c50b44 24
eencae 0:e8be38c50b44 25 // array of states in the FSM, each element is the output of the counter
eencae 2:bdd8b01141d1 26 // set the output in binary to make it easier, 0 is LED on, 1 is LED off
eencae 3:aac8dcbe6e18 27 int fsm[3] = {0b011,0b101,0b110};
eencae 0:e8be38c50b44 28
eencae 0:e8be38c50b44 29
eencae 0:e8be38c50b44 30 int main()
eencae 0:e8be38c50b44 31 {
eencae 3:aac8dcbe6e18 32 k64f_leds = 0b111; // turn off K64F LEDs
eencae 3:aac8dcbe6e18 33
eencae 0:e8be38c50b44 34 // set inital state
eencae 0:e8be38c50b44 35 int state = 0;
eencae 2:bdd8b01141d1 36
eencae 0:e8be38c50b44 37 while(1) { // loop forever
eencae 0:e8be38c50b44 38
eencae 0:e8be38c50b44 39 output = fsm[state]; // output current state
eencae 0:e8be38c50b44 40
eencae 0:e8be38c50b44 41 // check which state we are in and see which the next state should be
eencae 0:e8be38c50b44 42 switch(state) {
eencae 0:e8be38c50b44 43 case 0:
eencae 0:e8be38c50b44 44 state = 1;
eencae 0:e8be38c50b44 45 break;
eencae 0:e8be38c50b44 46 case 1:
eencae 0:e8be38c50b44 47 state = 2;
eencae 0:e8be38c50b44 48 break;
eencae 0:e8be38c50b44 49 case 2:
eencae 0:e8be38c50b44 50 state = 0;
eencae 0:e8be38c50b44 51 break;
eencae 0:e8be38c50b44 52 default:
eencae 3:aac8dcbe6e18 53 error("Invalid state"); //invalid state - call Mbed error routine
eencae 0:e8be38c50b44 54 // or could jump to starting state i.e. state = 0
eencae 0:e8be38c50b44 55 break;
eencae 0:e8be38c50b44 56 }
eencae 0:e8be38c50b44 57
eencae 2:bdd8b01141d1 58 wait(0.5); // small delay
eencae 0:e8be38c50b44 59
eencae 0:e8be38c50b44 60 }
eencae 0:e8be38c50b44 61 }