Jorn Dokter / Mbed 2 deprecated TEB_branch2

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
JordanO
Date:
Thu Oct 03 08:23:16 2019 +0000
Revision:
13:f90e31c6af2b
Parent:
12:d13ce121a781
Child:
14:1a695fc45fc6
Working State change

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 13:f90e31c6af2b 29 volatile int errorCode;
JordanO 10:ad2da21a102c 30
JornD 9:cb88b16a97d5 31
JordanO 10:ad2da21a102c 32
JordanO 10:ad2da21a102c 33 //Tickers
JordanO 10:ad2da21a102c 34 Ticker Main_Ticker;
JordanO 10:ad2da21a102c 35 Ticker Tick_Blinky;//used for the blinking of the leds
JordanO 10:ad2da21a102c 36
JordanO 10:ad2da21a102c 37
JordanO 10:ad2da21a102c 38
JornD 1:a5c1140f464a 39
JornD 8:ccd58f78b5cb 40 //Led FLicker
JornD 8:ccd58f78b5cb 41 void FlipLED(void)
JornD 8:ccd58f78b5cb 42 {
JordanO 13:f90e31c6af2b 43 pc.printf("FLIPLED \r\n");
JornD 8:ccd58f78b5cb 44 switch(ledcolor)
JornD 8:ccd58f78b5cb 45 {
JornD 8:ccd58f78b5cb 46 case 'r':
JordanO 13:f90e31c6af2b 47 ledr = !ledr;
JornD 8:ccd58f78b5cb 48 ledg = true;
JornD 8:ccd58f78b5cb 49 ledb = true;
JornD 8:ccd58f78b5cb 50 break;
JornD 8:ccd58f78b5cb 51 case 'b':
JornD 8:ccd58f78b5cb 52 ledr = true;
JornD 8:ccd58f78b5cb 53 ledg = true;
JordanO 13:f90e31c6af2b 54 ledb = !ledb;
JornD 8:ccd58f78b5cb 55 break;
JornD 8:ccd58f78b5cb 56 case 'g':
JornD 8:ccd58f78b5cb 57 ledr = true;
JordanO 13:f90e31c6af2b 58 ledg = !ledg;
JornD 8:ccd58f78b5cb 59 ledb = true;
JordanO 13:f90e31c6af2b 60 break;
JornD 8:ccd58f78b5cb 61 case 't':
JornD 8:ccd58f78b5cb 62 ledr = true;
JordanO 13:f90e31c6af2b 63 ledg = !ledg;
JordanO 13:f90e31c6af2b 64 ledb = !ledb;
JornD 8:ccd58f78b5cb 65 break;
JornD 8:ccd58f78b5cb 66 case 'p':
JordanO 13:f90e31c6af2b 67 ledr = !ledr;
JornD 8:ccd58f78b5cb 68 ledg = true;
JordanO 13:f90e31c6af2b 69 ledb = !ledb;
JornD 8:ccd58f78b5cb 70 break;
JordanO 13:f90e31c6af2b 71 default:
JordanO 13:f90e31c6af2b 72 errorCode = 1;
JordanO 13:f90e31c6af2b 73 pc.printf("Error 1: Color not defined");
JornD 8:ccd58f78b5cb 74 }
JordanO 13:f90e31c6af2b 75 pc.printf("Color %c \r\n",ledcolor);
JornD 8:ccd58f78b5cb 76 }
JornD 8:ccd58f78b5cb 77
JordanO 11:32deb48774f7 78 void Run_StateChangerButton1()
JordanO 11:32deb48774f7 79 {
JordanO 11:32deb48774f7 80 switch(CurrentState)
JordanO 11:32deb48774f7 81 {
JordanO 11:32deb48774f7 82 case Startup:
JordanO 11:32deb48774f7 83 CurrentState = CalibrationPhysical;
JordanO 11:32deb48774f7 84 break;
JordanO 11:32deb48774f7 85 case CalibrationPhysical:
JordanO 11:32deb48774f7 86 CurrentState = CalibrationIdle;
JordanO 11:32deb48774f7 87 break;
JordanO 11:32deb48774f7 88 case CalibrationIdle:
JordanO 11:32deb48774f7 89 CurrentState = CalibrationEMG;
JordanO 11:32deb48774f7 90 break;
JordanO 11:32deb48774f7 91 case CalibrationEMG:
JordanO 11:32deb48774f7 92 CurrentState = MovementIdle;
JordanO 11:32deb48774f7 93 break;
JordanO 11:32deb48774f7 94 case MovementIdle:
JordanO 11:32deb48774f7 95 CurrentState = TiltCup;
JordanO 11:32deb48774f7 96 break;
JordanO 11:32deb48774f7 97 case TiltCup:
JordanO 11:32deb48774f7 98 CurrentState = MovementIdle;
JordanO 11:32deb48774f7 99 break;
JordanO 11:32deb48774f7 100 case Move:
JordanO 11:32deb48774f7 101 CurrentState = MovementIdle;
JordanO 11:32deb48774f7 102 break;
JordanO 11:32deb48774f7 103 }
JordanO 11:32deb48774f7 104 }
JordanO 11:32deb48774f7 105
JordanO 12:d13ce121a781 106 void Run_StateChangerButton2()
JordanO 12:d13ce121a781 107 {
JordanO 12:d13ce121a781 108 switch(CurrentState)
JordanO 12:d13ce121a781 109 {
JordanO 13:f90e31c6af2b 110 case CalibrationIdle:
JordanO 13:f90e31c6af2b 111 CurrentState = Demo;
JordanO 13:f90e31c6af2b 112 break;
JordanO 13:f90e31c6af2b 113 case MovementIdle:
JordanO 13:f90e31c6af2b 114 CurrentState = Move;
JordanO 13:f90e31c6af2b 115 break;
JordanO 13:f90e31c6af2b 116 case TiltCup:
JordanO 13:f90e31c6af2b 117 CurrentState = MovementIdle;
JordanO 13:f90e31c6af2b 118 break;
JordanO 12:d13ce121a781 119 }
JordanO 12:d13ce121a781 120 }
JordanO 12:d13ce121a781 121
JornD 2:6d026d5655c5 122 void Run_Demo(void)
JornD 2:6d026d5655c5 123 {
JordanO 11:32deb48774f7 124 pc.printf("Starting Demo ...\r\n");
JornD 5:77929f5f1f32 125 }
JornD 2:6d026d5655c5 126
JornD 5:77929f5f1f32 127 void Run_MovementIdle(void)
JornD 5:77929f5f1f32 128 {
JordanO 11:32deb48774f7 129 pc.printf("Starting Idle ...\r\n");
JornD 5:77929f5f1f32 130 }
JornD 5:77929f5f1f32 131
JornD 5:77929f5f1f32 132 void Run_CalibrationIdle(void)
JornD 5:77929f5f1f32 133 {
JordanO 11:32deb48774f7 134 pc.printf("Starting Calibration Idle ...\r\n");
JornD 5:77929f5f1f32 135 }
JornD 5:77929f5f1f32 136
JornD 5:77929f5f1f32 137 void Run_Startup(void)
JornD 5:77929f5f1f32 138 {
JordanO 11:32deb48774f7 139 pc.printf("Starting Startup ...\r\n");
JornD 2:6d026d5655c5 140 }
JornD 2:6d026d5655c5 141
JornD 5:77929f5f1f32 142 void Run_CalibrationPhysical(void)
JornD 2:6d026d5655c5 143 {
JordanO 11:32deb48774f7 144 pc.printf("Starting Calibration Physical ... \r\n");
JordanO 13:f90e31c6af2b 145 wait(1);
JordanO 11:32deb48774f7 146 CurrentState = CalibrationIdle;
JordanO 11:32deb48774f7 147
JornD 5:77929f5f1f32 148 }
JornD 2:6d026d5655c5 149
JornD 5:77929f5f1f32 150 void Run_CalibrationEMG(void)
JornD 5:77929f5f1f32 151 {
JordanO 11:32deb48774f7 152 pc.printf("Starting Calibration EMG ... \r\n");
JornD 2:6d026d5655c5 153 }
JornD 2:6d026d5655c5 154
JornD 5:77929f5f1f32 155 void Run_Move(void)
JornD 5:77929f5f1f32 156 {
JordanO 13:f90e31c6af2b 157 pc.printf("Starting Move ... \r\n");
JornD 5:77929f5f1f32 158 }
JornD 5:77929f5f1f32 159
JornD 5:77929f5f1f32 160 void Run_TiltCup(void)
JornD 5:77929f5f1f32 161 {
JordanO 11:32deb48774f7 162 pc.printf("Starting Calibration TiltCup ... \r\n");
JornD 5:77929f5f1f32 163 }
JornD 5:77929f5f1f32 164
JornD 5:77929f5f1f32 165 void Run_FailState(void)
Rieks 6:41b02057fc2c 166 {
JordanO 11:32deb48774f7 167 pc.printf("Starting Calibration FailState ... \r\n");
JornD 5:77929f5f1f32 168 }
JornD 5:77929f5f1f32 169
JordanO 11:32deb48774f7 170
JornD 5:77929f5f1f32 171 //State Machine
JornD 2:6d026d5655c5 172 void StateMachine(void)
JornD 2:6d026d5655c5 173 {
JordanO 13:f90e31c6af2b 174 //Turn off all LEDs
JornD 2:6d026d5655c5 175 switch(CurrentState)
JornD 2:6d026d5655c5 176 {
JornD 2:6d026d5655c5 177 case Demo:
JordanO 13:f90e31c6af2b 178 ledcolor='t';
JordanO 11:32deb48774f7 179 Run_Demo();
JornD 2:6d026d5655c5 180 break;
JornD 5:77929f5f1f32 181 case MovementIdle:
JordanO 13:f90e31c6af2b 182 ledcolor='b';
JordanO 11:32deb48774f7 183 Run_MovementIdle();
JornD 5:77929f5f1f32 184 break;
JornD 5:77929f5f1f32 185 case CalibrationIdle:
JordanO 13:f90e31c6af2b 186 ledcolor='b';
JordanO 11:32deb48774f7 187 Run_CalibrationIdle();
JornD 5:77929f5f1f32 188 break;
JornD 9:cb88b16a97d5 189 case Startup:
JordanO 13:f90e31c6af2b 190 ledcolor='b';
JordanO 11:32deb48774f7 191 Run_Startup();
JornD 5:77929f5f1f32 192 break;
JornD 5:77929f5f1f32 193 case CalibrationPhysical:
Rieks 7:af0c16ae48d7 194 ledcolor='g';
JordanO 11:32deb48774f7 195 Run_CalibrationPhysical();
JornD 5:77929f5f1f32 196 break;
JornD 5:77929f5f1f32 197 case CalibrationEMG:
Rieks 7:af0c16ae48d7 198 ledcolor='g';
JordanO 11:32deb48774f7 199 Run_CalibrationEMG();
JornD 5:77929f5f1f32 200 break;
JornD 5:77929f5f1f32 201 case Move:
Rieks 7:af0c16ae48d7 202 ledcolor='p';
JordanO 11:32deb48774f7 203 Run_Move();
JornD 5:77929f5f1f32 204 break;
JornD 5:77929f5f1f32 205 case TiltCup:
Rieks 7:af0c16ae48d7 206 ledcolor='t';
JordanO 11:32deb48774f7 207 Run_TiltCup();
JornD 5:77929f5f1f32 208 break;
JornD 5:77929f5f1f32 209 case FailState:
JordanO 13:f90e31c6af2b 210 ledcolor='r';
JordanO 11:32deb48774f7 211 Run_FailState();
JornD 2:6d026d5655c5 212 break;
JordanO 12:d13ce121a781 213 default:
JordanO 12:d13ce121a781 214 ledcolor='r';
JordanO 12:d13ce121a781 215 break;
JornD 2:6d026d5655c5 216 }
JornD 2:6d026d5655c5 217 }
JornD 1:a5c1140f464a 218
JornD 5:77929f5f1f32 219 //Main Loop
JornD 8:ccd58f78b5cb 220 void mainloop()
JornD 8:ccd58f78b5cb 221 {
JornD 9:cb88b16a97d5 222 StateMachine();
JornD 8:ccd58f78b5cb 223 }
JornD 8:ccd58f78b5cb 224
JornD 1:a5c1140f464a 225 int main()
JornD 8:ccd58f78b5cb 226 {
JornD 8:ccd58f78b5cb 227 //Initialize
JordanO 13:f90e31c6af2b 228 ledr = true;
JordanO 13:f90e31c6af2b 229 //ledr.write(.4);
JordanO 13:f90e31c6af2b 230 ledg = true;
JordanO 13:f90e31c6af2b 231 //ledg.write(.4);
JordanO 13:f90e31c6af2b 232 ledb = true;
JordanO 13:f90e31c6af2b 233 //ledb.write(.4);
JordanO 11:32deb48774f7 234
JordanO 11:32deb48774f7 235 pc.baud(115200);
JornD 5:77929f5f1f32 236 CurrentState = Startup;
JornD 9:cb88b16a97d5 237
JordanO 11:32deb48774f7 238 button1.mode(PullUp);
JordanO 11:32deb48774f7 239 button1.rise(Run_StateChangerButton1);
JordanO 11:32deb48774f7 240 button2.mode(PullUp);
JordanO 12:d13ce121a781 241 button2.rise(Run_StateChangerButton2);
JordanO 12:d13ce121a781 242
JordanO 13:f90e31c6af2b 243 //Tickers
JordanO 13:f90e31c6af2b 244 Main_Ticker.attach(mainloop,2);
JordanO 13:f90e31c6af2b 245 Tick_Blinky.attach(FlipLED,.5);
JordanO 13:f90e31c6af2b 246
JordanO 11:32deb48774f7 247
JornD 1:a5c1140f464a 248 while(true)
JornD 1:a5c1140f464a 249 {
JornD 8:ccd58f78b5cb 250
JornD 1:a5c1140f464a 251 }
JornD 1:a5c1140f464a 252 }