Jorn Dokter / Mbed 2 deprecated TEB_branch2

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
JornD
Date:
Tue Oct 15 11:34:02 2019 +0000
Revision:
49:a9ed4f4cdef7
Parent:
48:39f84359998a
Child:
56:58cbb056e4be
Cleaned the files and commented some stuff

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