Jorn Dokter / Mbed 2 deprecated TEB_branch2

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
JornD
Date:
Wed Oct 09 13:20:19 2019 +0000
Revision:
28:4a5671b3d88d
Parent:
27:71be6e074d0f
Child:
29:8d588d554779
Child:
33:5e2e95c322da
Child:
34:b035131eda3e
Fixed global variable and structure distribution;

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