Jorn Dokter / Mbed 2 deprecated TEB_branch2

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
JordanO
Date:
Thu Oct 03 07:35:27 2019 +0000
Revision:
12:d13ce121a781
Parent:
11:32deb48774f7
Child:
13:f90e31c6af2b
Button 2 state change added

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
JordanO 12:d13ce121a781 99 void Run_StateChangerButton2()
JordanO 12:d13ce121a781 100 {
JordanO 12:d13ce121a781 101 switch(CurrentState)
JordanO 12:d13ce121a781 102 {
JordanO 12:d13ce121a781 103 case CalibrationIdle:
JordanO 12:d13ce121a781 104 CurrentState = Demo;
JordanO 12:d13ce121a781 105 case MovementIdle:
JordanO 12:d13ce121a781 106 CurrentState = Move;
JordanO 12:d13ce121a781 107 break;
JordanO 12:d13ce121a781 108 case TiltCup:
JordanO 12:d13ce121a781 109 CurrentState = MovementIdle;
JordanO 12:d13ce121a781 110 break;
JordanO 12:d13ce121a781 111 }
JordanO 12:d13ce121a781 112 }
JordanO 12:d13ce121a781 113
JornD 2:6d026d5655c5 114 void Run_Demo(void)
JornD 2:6d026d5655c5 115 {
JordanO 11:32deb48774f7 116 pc.printf("Starting Demo ...\r\n");
JornD 5:77929f5f1f32 117 }
JornD 2:6d026d5655c5 118
JornD 5:77929f5f1f32 119 void Run_MovementIdle(void)
JornD 5:77929f5f1f32 120 {
JordanO 11:32deb48774f7 121 pc.printf("Starting Idle ...\r\n");
JornD 5:77929f5f1f32 122 }
JornD 5:77929f5f1f32 123
JornD 5:77929f5f1f32 124 void Run_CalibrationIdle(void)
JornD 5:77929f5f1f32 125 {
JordanO 11:32deb48774f7 126 pc.printf("Starting Calibration Idle ...\r\n");
JornD 5:77929f5f1f32 127 }
JornD 5:77929f5f1f32 128
JornD 5:77929f5f1f32 129 void Run_Startup(void)
JornD 5:77929f5f1f32 130 {
JordanO 11:32deb48774f7 131 pc.printf("Starting Startup ...\r\n");
JornD 2:6d026d5655c5 132 }
JornD 2:6d026d5655c5 133
JornD 5:77929f5f1f32 134 void Run_CalibrationPhysical(void)
JornD 2:6d026d5655c5 135 {
JordanO 11:32deb48774f7 136 pc.printf("Starting Calibration Physical ... \r\n");
JordanO 11:32deb48774f7 137 wait(2);
JordanO 11:32deb48774f7 138 CurrentState = CalibrationIdle;
JordanO 11:32deb48774f7 139
JornD 5:77929f5f1f32 140 }
JornD 2:6d026d5655c5 141
JornD 5:77929f5f1f32 142 void Run_CalibrationEMG(void)
JornD 5:77929f5f1f32 143 {
JordanO 11:32deb48774f7 144 pc.printf("Starting Calibration EMG ... \r\n");
JornD 2:6d026d5655c5 145 }
JornD 2:6d026d5655c5 146
JornD 5:77929f5f1f32 147 void Run_Move(void)
JornD 5:77929f5f1f32 148 {
JordanO 11:32deb48774f7 149 pc.printf("Starting Calibration Move ... \r\n");
JornD 5:77929f5f1f32 150 }
JornD 5:77929f5f1f32 151
JornD 5:77929f5f1f32 152 void Run_TiltCup(void)
JornD 5:77929f5f1f32 153 {
JordanO 11:32deb48774f7 154 pc.printf("Starting Calibration TiltCup ... \r\n");
JornD 5:77929f5f1f32 155 }
JornD 5:77929f5f1f32 156
JornD 5:77929f5f1f32 157 void Run_FailState(void)
Rieks 6:41b02057fc2c 158 {
JordanO 11:32deb48774f7 159 pc.printf("Starting Calibration FailState ... \r\n");
JornD 5:77929f5f1f32 160 }
JornD 5:77929f5f1f32 161
JordanO 11:32deb48774f7 162
JornD 5:77929f5f1f32 163 //State Machine
JornD 2:6d026d5655c5 164 void StateMachine(void)
JornD 2:6d026d5655c5 165 {
JornD 8:ccd58f78b5cb 166 //Turn off all LEDs
JornD 8:ccd58f78b5cb 167 ledr = true;
JornD 8:ccd58f78b5cb 168 ledg = true;
JornD 8:ccd58f78b5cb 169 ledb = true;
JornD 8:ccd58f78b5cb 170
JornD 2:6d026d5655c5 171 switch(CurrentState)
JornD 2:6d026d5655c5 172 {
JornD 2:6d026d5655c5 173 case Demo:
JordanO 11:32deb48774f7 174 ledcolor='g';
JordanO 11:32deb48774f7 175 Run_Demo();
JornD 2:6d026d5655c5 176 break;
JornD 5:77929f5f1f32 177 case MovementIdle:
JordanO 11:32deb48774f7 178 ledcolor='g';
JordanO 11:32deb48774f7 179 Run_MovementIdle();
JornD 5:77929f5f1f32 180 break;
JornD 5:77929f5f1f32 181 case CalibrationIdle:
JordanO 11:32deb48774f7 182 ledcolor='g';
JordanO 11:32deb48774f7 183 Run_CalibrationIdle();
JornD 5:77929f5f1f32 184 break;
JornD 9:cb88b16a97d5 185 case Startup:
JordanO 11:32deb48774f7 186 ledcolor='g';
JordanO 11:32deb48774f7 187 Run_Startup();
JornD 5:77929f5f1f32 188 break;
JornD 5:77929f5f1f32 189 case CalibrationPhysical:
Rieks 7:af0c16ae48d7 190 ledcolor='g';
JordanO 11:32deb48774f7 191 Run_CalibrationPhysical();
JornD 5:77929f5f1f32 192 break;
JornD 5:77929f5f1f32 193 case CalibrationEMG:
Rieks 7:af0c16ae48d7 194 ledcolor='g';
JordanO 11:32deb48774f7 195 Run_CalibrationEMG();
JornD 5:77929f5f1f32 196 break;
JornD 5:77929f5f1f32 197 case Move:
Rieks 7:af0c16ae48d7 198 ledcolor='p';
JordanO 11:32deb48774f7 199 Run_Move();
JornD 5:77929f5f1f32 200 break;
JornD 5:77929f5f1f32 201 case TiltCup:
Rieks 7:af0c16ae48d7 202 ledcolor='t';
JordanO 11:32deb48774f7 203 Run_TiltCup();
JornD 5:77929f5f1f32 204 break;
JornD 5:77929f5f1f32 205 case FailState:
JordanO 11:32deb48774f7 206 ledcolor='t';
JordanO 11:32deb48774f7 207 Run_FailState();
JornD 2:6d026d5655c5 208 break;
JordanO 12:d13ce121a781 209 default:
JordanO 12:d13ce121a781 210 ledcolor='r';
JordanO 12:d13ce121a781 211 break;
JornD 2:6d026d5655c5 212 }
JornD 2:6d026d5655c5 213 }
JornD 1:a5c1140f464a 214
JornD 5:77929f5f1f32 215 //Main Loop
JornD 8:ccd58f78b5cb 216 void mainloop()
JornD 8:ccd58f78b5cb 217 {
JornD 9:cb88b16a97d5 218 StateMachine();
JornD 8:ccd58f78b5cb 219 }
JornD 8:ccd58f78b5cb 220
JornD 1:a5c1140f464a 221 int main()
JornD 8:ccd58f78b5cb 222 {
JornD 8:ccd58f78b5cb 223 //Initialize
JordanO 11:32deb48774f7 224
JordanO 11:32deb48774f7 225
JordanO 11:32deb48774f7 226 pc.baud(115200);
JornD 8:ccd58f78b5cb 227 Tick_Blinky.attach(FlipLED,1);
JornD 5:77929f5f1f32 228 CurrentState = Startup;
JornD 9:cb88b16a97d5 229 Main_Ticker.attach(mainloop,2);
JornD 9:cb88b16a97d5 230
JordanO 11:32deb48774f7 231 button1.mode(PullUp);
JordanO 11:32deb48774f7 232 button1.rise(Run_StateChangerButton1);
JordanO 11:32deb48774f7 233 button2.mode(PullUp);
JordanO 12:d13ce121a781 234 button2.rise(Run_StateChangerButton2);
JordanO 12:d13ce121a781 235
JordanO 11:32deb48774f7 236
JornD 1:a5c1140f464a 237 while(true)
JornD 1:a5c1140f464a 238 {
JornD 8:ccd58f78b5cb 239
JornD 1:a5c1140f464a 240 }
JornD 1:a5c1140f464a 241 }