Jorn Dokter / Mbed 2 deprecated TEB_branch2

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
JordanO
Date:
Thu Oct 10 10:56:23 2019 +0000
Revision:
34:b035131eda3e
Parent:
28:4a5671b3d88d
Child:
37:6602655a80f4
Structure working;

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