Jorn Dokter / Mbed 2 deprecated TEB_branch2

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
JordanO
Date:
Wed Oct 02 14:48:39 2019 +0000
Revision:
11:32deb48774f7
Parent:
10:ad2da21a102c
Child:
12:d13ce121a781
Buttons for state change, led color does not change correctly

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JornD 8:ccd58f78b5cb 1 //Libraries
JordanO 10:ad2da21a102c 2 #include "mbed.h"
JordanO 10:ad2da21a102c 3 #include "FastPWM.h"
JordanO 10:ad2da21a102c 4 #include "HIDScope.h"
JordanO 10:ad2da21a102c 5 #include "MODSERIAL.h"
JordanO 10:ad2da21a102c 6 #include "QEI.h"
JornD 8:ccd58f78b5cb 7
JordanO 10:ad2da21a102c 8 //Objects
JordanO 10:ad2da21a102c 9 //LED
JordanO 10:ad2da21a102c 10 DigitalOut ledb(LED_BLUE); // ledb=true & ledb=1 is led off!!
JordanO 10:ad2da21a102c 11 DigitalOut ledg(LED_GREEN);
JordanO 10:ad2da21a102c 12 DigitalOut ledr(LED_RED);
JordanO 10:ad2da21a102c 13 //Motors
JordanO 10:ad2da21a102c 14
JordanO 10:ad2da21a102c 15 //Sensors
JordanO 10:ad2da21a102c 16
JordanO 10:ad2da21a102c 17 //Buttons
JordanO 11:32deb48774f7 18 InterruptIn button1(SW2); //button on the side of the reset button
JordanO 11:32deb48774f7 19 InterruptIn button2(SW3); //button on the side opposite of the reset button
JordanO 11:32deb48774f7 20
JordanO 11:32deb48774f7 21 //PC
JordanO 11:32deb48774f7 22 Serial pc(USBTX,USBRX);
JornD 8:ccd58f78b5cb 23
JordanO 10:ad2da21a102c 24 //Variables
JordanO 10:ad2da21a102c 25 enum States {MovementIdle, CalibrationIdle, Demo, Startup, CalibrationPhysical, CalibrationEMG, Move, TiltCup, FailState};
JordanO 10:ad2da21a102c 26 States CurrentState;
JordanO 10:ad2da21a102c 27
JordanO 10:ad2da21a102c 28 volatile char ledcolor; //r is red, b is blue, g is green, t is bluegreen, p is purple
JordanO 10:ad2da21a102c 29
JornD 9:cb88b16a97d5 30
JordanO 10:ad2da21a102c 31
JordanO 10:ad2da21a102c 32 //Tickers
JordanO 10:ad2da21a102c 33 Ticker Main_Ticker;
JordanO 10:ad2da21a102c 34 Ticker Tick_Blinky;//used for the blinking of the leds
JordanO 10:ad2da21a102c 35
JordanO 10:ad2da21a102c 36
JordanO 10:ad2da21a102c 37
JornD 1:a5c1140f464a 38
JornD 8:ccd58f78b5cb 39 //Led FLicker
JornD 8:ccd58f78b5cb 40 void FlipLED(void)
JornD 8:ccd58f78b5cb 41 {
JornD 8:ccd58f78b5cb 42 switch(ledcolor)
JornD 8:ccd58f78b5cb 43 {
JornD 8:ccd58f78b5cb 44 case 'r':
JornD 8:ccd58f78b5cb 45 ledr =! ledr;
JornD 8:ccd58f78b5cb 46 ledg = true;
JornD 8:ccd58f78b5cb 47 ledb = true;
JornD 8:ccd58f78b5cb 48 break;
JornD 8:ccd58f78b5cb 49 case 'b':
JornD 8:ccd58f78b5cb 50 ledr = true;
JornD 8:ccd58f78b5cb 51 ledg = true;
JornD 8:ccd58f78b5cb 52 ledb =! ledb;
JornD 8:ccd58f78b5cb 53 break;
JornD 8:ccd58f78b5cb 54 case 'g':
JornD 8:ccd58f78b5cb 55 ledr = true;
JornD 8:ccd58f78b5cb 56 ledg =! ledg;
JornD 8:ccd58f78b5cb 57 ledb = true;
JornD 8:ccd58f78b5cb 58 case 't':
JornD 8:ccd58f78b5cb 59 ledr = true;
JornD 8:ccd58f78b5cb 60 ledg =! ledg;
JornD 8:ccd58f78b5cb 61 ledb =! ledb;
JornD 8:ccd58f78b5cb 62 break;
JornD 8:ccd58f78b5cb 63 case 'p':
JornD 8:ccd58f78b5cb 64 ledr =! ledr;
JornD 8:ccd58f78b5cb 65 ledg = true;
JornD 8:ccd58f78b5cb 66 ledb =! ledb;
JornD 8:ccd58f78b5cb 67 break;
JornD 8:ccd58f78b5cb 68 }
JornD 8:ccd58f78b5cb 69 }
JornD 8:ccd58f78b5cb 70
JordanO 11:32deb48774f7 71 void Run_StateChangerButton1()
JordanO 11:32deb48774f7 72 {
JordanO 11:32deb48774f7 73 switch(CurrentState)
JordanO 11:32deb48774f7 74 {
JordanO 11:32deb48774f7 75 case Startup:
JordanO 11:32deb48774f7 76 CurrentState = CalibrationPhysical;
JordanO 11:32deb48774f7 77 break;
JordanO 11:32deb48774f7 78 case CalibrationPhysical:
JordanO 11:32deb48774f7 79 CurrentState = CalibrationIdle;
JordanO 11:32deb48774f7 80 break;
JordanO 11:32deb48774f7 81 case CalibrationIdle:
JordanO 11:32deb48774f7 82 CurrentState = CalibrationEMG;
JordanO 11:32deb48774f7 83 break;
JordanO 11:32deb48774f7 84 case CalibrationEMG:
JordanO 11:32deb48774f7 85 CurrentState = MovementIdle;
JordanO 11:32deb48774f7 86 break;
JordanO 11:32deb48774f7 87 case MovementIdle:
JordanO 11:32deb48774f7 88 CurrentState = TiltCup;
JordanO 11:32deb48774f7 89 break;
JordanO 11:32deb48774f7 90 case TiltCup:
JordanO 11:32deb48774f7 91 CurrentState = MovementIdle;
JordanO 11:32deb48774f7 92 break;
JordanO 11:32deb48774f7 93 case Move:
JordanO 11:32deb48774f7 94 CurrentState = MovementIdle;
JordanO 11:32deb48774f7 95 break;
JordanO 11:32deb48774f7 96 }
JordanO 11:32deb48774f7 97 }
JordanO 11:32deb48774f7 98
JornD 2:6d026d5655c5 99 void Run_Demo(void)
JornD 2:6d026d5655c5 100 {
JordanO 11:32deb48774f7 101 pc.printf("Starting Demo ...\r\n");
JornD 5:77929f5f1f32 102 }
JornD 2:6d026d5655c5 103
JornD 5:77929f5f1f32 104 void Run_MovementIdle(void)
JornD 5:77929f5f1f32 105 {
JordanO 11:32deb48774f7 106 pc.printf("Starting Idle ...\r\n");
JordanO 11:32deb48774f7 107 //button1.rise(Run_StateChangerButton1);
JordanO 11:32deb48774f7 108 //button2.rise(CurrentState = Move);
JornD 5:77929f5f1f32 109 }
JornD 5:77929f5f1f32 110
JornD 5:77929f5f1f32 111 void Run_CalibrationIdle(void)
JornD 5:77929f5f1f32 112 {
JordanO 11:32deb48774f7 113 pc.printf("Starting Calibration Idle ...\r\n");
JordanO 11:32deb48774f7 114 //button1.rise(Run_StateChangerButton1);
JordanO 11:32deb48774f7 115 //button2.rise(CurrentState = Demo);
JornD 5:77929f5f1f32 116 }
JornD 5:77929f5f1f32 117
JornD 5:77929f5f1f32 118 void Run_Startup(void)
JornD 5:77929f5f1f32 119 {
JordanO 11:32deb48774f7 120 pc.printf("Starting Startup ...\r\n");
JordanO 11:32deb48774f7 121 //button1.rise(Run_StateChangerButton1);
JornD 2:6d026d5655c5 122 }
JornD 2:6d026d5655c5 123
JornD 5:77929f5f1f32 124 void Run_CalibrationPhysical(void)
JornD 2:6d026d5655c5 125 {
JordanO 11:32deb48774f7 126 pc.printf("Starting Calibration Physical ... \r\n");
JordanO 11:32deb48774f7 127 wait(2);
JordanO 11:32deb48774f7 128 CurrentState = CalibrationIdle;
JordanO 11:32deb48774f7 129
JornD 5:77929f5f1f32 130 }
JornD 2:6d026d5655c5 131
JornD 5:77929f5f1f32 132 void Run_CalibrationEMG(void)
JornD 5:77929f5f1f32 133 {
JordanO 11:32deb48774f7 134 pc.printf("Starting Calibration EMG ... \r\n");
JordanO 11:32deb48774f7 135 //button1.rise(Run_StateChangerButton1);
JornD 2:6d026d5655c5 136 }
JornD 2:6d026d5655c5 137
JornD 5:77929f5f1f32 138 void Run_Move(void)
JornD 5:77929f5f1f32 139 {
JordanO 11:32deb48774f7 140 pc.printf("Starting Calibration Move ... \r\n");
JordanO 11:32deb48774f7 141 //button1.rise(Run_StateChangerButton1);
JornD 5:77929f5f1f32 142 }
JornD 5:77929f5f1f32 143
JornD 5:77929f5f1f32 144 void Run_TiltCup(void)
JornD 5:77929f5f1f32 145 {
JordanO 11:32deb48774f7 146 pc.printf("Starting Calibration TiltCup ... \r\n");
JordanO 11:32deb48774f7 147 //button1.rise(Run_StateChangerButton1);
JordanO 11:32deb48774f7 148 //buttone2.ruse(CurrentState = FailState);
JornD 5:77929f5f1f32 149 }
JornD 5:77929f5f1f32 150
JornD 5:77929f5f1f32 151 void Run_FailState(void)
Rieks 6:41b02057fc2c 152 {
JordanO 11:32deb48774f7 153 pc.printf("Starting Calibration FailState ... \r\n");
JornD 5:77929f5f1f32 154 }
JornD 5:77929f5f1f32 155
JordanO 11:32deb48774f7 156
JornD 5:77929f5f1f32 157 //State Machine
JornD 2:6d026d5655c5 158 void StateMachine(void)
JornD 2:6d026d5655c5 159 {
JornD 8:ccd58f78b5cb 160 //Turn off all LEDs
JornD 8:ccd58f78b5cb 161 ledr = true;
JornD 8:ccd58f78b5cb 162 ledg = true;
JornD 8:ccd58f78b5cb 163 ledb = true;
JornD 8:ccd58f78b5cb 164
JornD 2:6d026d5655c5 165 switch(CurrentState)
JornD 2:6d026d5655c5 166 {
JornD 2:6d026d5655c5 167 case Demo:
JordanO 11:32deb48774f7 168 ledcolor='g';
JordanO 11:32deb48774f7 169 Run_Demo();
JornD 2:6d026d5655c5 170 break;
JornD 5:77929f5f1f32 171 case MovementIdle:
JordanO 11:32deb48774f7 172 ledcolor='g';
JordanO 11:32deb48774f7 173 Run_MovementIdle();
JornD 5:77929f5f1f32 174 break;
JornD 5:77929f5f1f32 175 case CalibrationIdle:
JordanO 11:32deb48774f7 176 ledcolor='g';
JordanO 11:32deb48774f7 177 Run_CalibrationIdle();
JornD 5:77929f5f1f32 178 break;
JornD 9:cb88b16a97d5 179 case Startup:
JordanO 11:32deb48774f7 180 ledcolor='g';
JordanO 11:32deb48774f7 181 Run_Startup();
JornD 5:77929f5f1f32 182 break;
JornD 5:77929f5f1f32 183 case CalibrationPhysical:
Rieks 7:af0c16ae48d7 184 ledcolor='g';
JordanO 11:32deb48774f7 185 Run_CalibrationPhysical();
JornD 5:77929f5f1f32 186 break;
JornD 5:77929f5f1f32 187 case CalibrationEMG:
Rieks 7:af0c16ae48d7 188 ledcolor='g';
JordanO 11:32deb48774f7 189 Run_CalibrationEMG();
JornD 5:77929f5f1f32 190 break;
JornD 5:77929f5f1f32 191 case Move:
Rieks 7:af0c16ae48d7 192 ledcolor='p';
JordanO 11:32deb48774f7 193 Run_Move();
JornD 5:77929f5f1f32 194 break;
JornD 5:77929f5f1f32 195 case TiltCup:
Rieks 7:af0c16ae48d7 196 ledcolor='t';
JordanO 11:32deb48774f7 197 Run_TiltCup();
JornD 5:77929f5f1f32 198 break;
JornD 5:77929f5f1f32 199 case FailState:
JordanO 11:32deb48774f7 200 ledcolor='t';
JordanO 11:32deb48774f7 201 Run_FailState();
JornD 2:6d026d5655c5 202 break;
JornD 2:6d026d5655c5 203 }
JornD 2:6d026d5655c5 204 }
JornD 1:a5c1140f464a 205
JornD 5:77929f5f1f32 206 //Main Loop
JornD 8:ccd58f78b5cb 207 void mainloop()
JornD 8:ccd58f78b5cb 208 {
JornD 9:cb88b16a97d5 209 StateMachine();
JornD 8:ccd58f78b5cb 210 }
JornD 8:ccd58f78b5cb 211
JornD 1:a5c1140f464a 212 int main()
JornD 8:ccd58f78b5cb 213 {
JornD 8:ccd58f78b5cb 214 //Initialize
JordanO 11:32deb48774f7 215
JordanO 11:32deb48774f7 216
JordanO 11:32deb48774f7 217 pc.baud(115200);
JornD 8:ccd58f78b5cb 218 Tick_Blinky.attach(FlipLED,1);
JornD 5:77929f5f1f32 219 CurrentState = Startup;
JornD 9:cb88b16a97d5 220 Main_Ticker.attach(mainloop,2);
JornD 9:cb88b16a97d5 221
JordanO 11:32deb48774f7 222 button1.mode(PullUp);
JordanO 11:32deb48774f7 223 button1.rise(Run_StateChangerButton1);
JordanO 11:32deb48774f7 224 button2.mode(PullUp);
JordanO 11:32deb48774f7 225
JornD 1:a5c1140f464a 226 while(true)
JornD 1:a5c1140f464a 227 {
JornD 8:ccd58f78b5cb 228
JornD 1:a5c1140f464a 229 }
JornD 1:a5c1140f464a 230 }