Jorn Dokter / Mbed 2 deprecated TEB_branch2

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
JordanO
Date:
Thu Oct 03 09:04:34 2019 +0000
Revision:
14:1a695fc45fc6
Parent:
13:f90e31c6af2b
Child:
15:95034d92bc76
Failstate Made;

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