Jorn Dokter / Mbed 2 deprecated TEB_branch2

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
JornD
Date:
Wed Oct 09 07:11:45 2019 +0000
Revision:
24:d0ca537913c2
Parent:
23:767911637f3a
Child:
27:71be6e074d0f
Fixed L6312W error by adding inclusion guard;

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 8:ccd58f78b5cb 10
JordanO 10:ad2da21a102c 11 //Objects
JordanO 10:ad2da21a102c 12 //LED
JordanO 10:ad2da21a102c 13 DigitalOut ledb(LED_BLUE); // ledb=true & ledb=1 is led off!!
JordanO 10:ad2da21a102c 14 DigitalOut ledg(LED_GREEN);
JordanO 10:ad2da21a102c 15 DigitalOut ledr(LED_RED);
JordanO 10:ad2da21a102c 16 //Motors
JordanO 10:ad2da21a102c 17
JordanO 10:ad2da21a102c 18 //Sensors
JordanO 14:1a695fc45fc6 19 //QEI Encoder1(D12,D13,NC,64,QEI::X2_ENCODING);
JordanO 14:1a695fc45fc6 20 //QEI Encoder2(D14,D15,NC,64,QEI::X2_ENCODING);
JordanO 14:1a695fc45fc6 21 //QEI Encoder3(D16,D17,NC,64,QEI::X2_ENCODING);
JordanO 10:ad2da21a102c 22
JordanO 10:ad2da21a102c 23 //Buttons
JordanO 11:32deb48774f7 24 InterruptIn button1(SW2); //button on the side of the reset button
JordanO 11:32deb48774f7 25 InterruptIn button2(SW3); //button on the side opposite of the reset button
JordanO 11:32deb48774f7 26
JordanO 11:32deb48774f7 27 //PC
JornD 15:95034d92bc76 28 Serial pc(USBTX,USBRX);
JornD 8:ccd58f78b5cb 29
JordanO 10:ad2da21a102c 30 //Variables
JordanO 10:ad2da21a102c 31 enum States {MovementIdle, CalibrationIdle, Demo, Startup, CalibrationPhysical, CalibrationEMG, Move, TiltCup, FailState};
JordanO 10:ad2da21a102c 32 States CurrentState;
JordanO 10:ad2da21a102c 33
JornD 23:767911637f3a 34 extern double X;
JornD 23:767911637f3a 35
JordanO 10:ad2da21a102c 36 volatile char ledcolor; //r is red, b is blue, g is green, t is bluegreen, p is purple
JordanO 13:f90e31c6af2b 37 volatile int errorCode;
JordanO 10:ad2da21a102c 38
JornD 24:d0ca537913c2 39 //Ticker Timings
JornD 24:d0ca537913c2 40 const float mainLoopT = 2; //Main Loopt Ticker wait
JornD 24:d0ca537913c2 41 const float ledFlipperT = .5; //LED Flicker wait
JordanO 14:1a695fc45fc6 42
JordanO 10:ad2da21a102c 43 //Tickers
JordanO 10:ad2da21a102c 44 Ticker Main_Ticker;
JordanO 10:ad2da21a102c 45 Ticker Tick_Blinky;//used for the blinking of the leds
JordanO 10:ad2da21a102c 46
JornD 24:d0ca537913c2 47 //Changing LED colour depending on current state
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
JornD 24:d0ca537913c2 85 // Testing Placeholder
JordanO 14:1a695fc45fc6 86 // SW2 = button1 state changing
JordanO 11:32deb48774f7 87 void Run_StateChangerButton1()
JordanO 11:32deb48774f7 88 {
JordanO 11:32deb48774f7 89 switch(CurrentState)
JordanO 11:32deb48774f7 90 {
JordanO 14:1a695fc45fc6 91 case Startup: //From
JordanO 14:1a695fc45fc6 92 CurrentState = CalibrationPhysical; //To
JordanO 14:1a695fc45fc6 93 break; //Break from switch
JordanO 11:32deb48774f7 94 case CalibrationPhysical:
JordanO 11:32deb48774f7 95 CurrentState = CalibrationIdle;
JordanO 11:32deb48774f7 96 break;
JordanO 11:32deb48774f7 97 case CalibrationIdle:
JordanO 11:32deb48774f7 98 CurrentState = CalibrationEMG;
JordanO 11:32deb48774f7 99 break;
JordanO 11:32deb48774f7 100 case CalibrationEMG:
JordanO 11:32deb48774f7 101 CurrentState = MovementIdle;
JordanO 11:32deb48774f7 102 break;
JordanO 11:32deb48774f7 103 case MovementIdle:
JordanO 11:32deb48774f7 104 CurrentState = TiltCup;
JordanO 11:32deb48774f7 105 break;
JordanO 11:32deb48774f7 106 case TiltCup:
JordanO 11:32deb48774f7 107 CurrentState = MovementIdle;
JordanO 11:32deb48774f7 108 break;
JordanO 11:32deb48774f7 109 case Move:
JordanO 11:32deb48774f7 110 CurrentState = MovementIdle;
JordanO 11:32deb48774f7 111 break;
JordanO 11:32deb48774f7 112 }
JordanO 11:32deb48774f7 113 }
JornD 24:d0ca537913c2 114
JornD 24:d0ca537913c2 115 // Testing Placeholder
JordanO 14:1a695fc45fc6 116 // SW3 = button2 state changing
JornD 15:95034d92bc76 117 void Run_StateChangerButton2(void)
JordanO 12:d13ce121a781 118 {
JordanO 12:d13ce121a781 119 switch(CurrentState)
JordanO 12:d13ce121a781 120 {
JordanO 13:f90e31c6af2b 121 case CalibrationIdle:
JordanO 13:f90e31c6af2b 122 CurrentState = Demo;
JordanO 13:f90e31c6af2b 123 break;
JordanO 13:f90e31c6af2b 124 case MovementIdle:
JordanO 13:f90e31c6af2b 125 CurrentState = Move;
JordanO 13:f90e31c6af2b 126 break;
JordanO 13:f90e31c6af2b 127 case TiltCup:
JordanO 13:f90e31c6af2b 128 CurrentState = MovementIdle;
JordanO 13:f90e31c6af2b 129 break;
JordanO 12:d13ce121a781 130 }
JordanO 12:d13ce121a781 131 }
JordanO 12:d13ce121a781 132
JordanO 14:1a695fc45fc6 133 //State functions
JornD 2:6d026d5655c5 134 void Run_Demo(void)
JornD 2:6d026d5655c5 135 {
JordanO 11:32deb48774f7 136 pc.printf("Starting Demo ...\r\n");
JornD 5:77929f5f1f32 137 }
JornD 2:6d026d5655c5 138
JornD 5:77929f5f1f32 139 void Run_MovementIdle(void)
JornD 5:77929f5f1f32 140 {
JordanO 11:32deb48774f7 141 pc.printf("Starting Idle ...\r\n");
JornD 5:77929f5f1f32 142 }
JornD 5:77929f5f1f32 143
JornD 5:77929f5f1f32 144 void Run_CalibrationIdle(void)
JornD 5:77929f5f1f32 145 {
JordanO 11:32deb48774f7 146 pc.printf("Starting Calibration Idle ...\r\n");
JornD 5:77929f5f1f32 147 }
JornD 5:77929f5f1f32 148
JornD 5:77929f5f1f32 149 void Run_Startup(void)
JornD 5:77929f5f1f32 150 {
JordanO 11:32deb48774f7 151 pc.printf("Starting Startup ...\r\n");
JornD 2:6d026d5655c5 152 }
JornD 2:6d026d5655c5 153
JornD 5:77929f5f1f32 154 void Run_CalibrationPhysical(void)
JornD 2:6d026d5655c5 155 {
JordanO 11:32deb48774f7 156 pc.printf("Starting Calibration Physical ... \r\n");
JordanO 13:f90e31c6af2b 157 wait(1);
JordanO 11:32deb48774f7 158 CurrentState = CalibrationIdle;
JornD 5:77929f5f1f32 159 }
JornD 2:6d026d5655c5 160
JornD 5:77929f5f1f32 161 void Run_CalibrationEMG(void)
JornD 5:77929f5f1f32 162 {
JordanO 11:32deb48774f7 163 pc.printf("Starting Calibration EMG ... \r\n");
JornD 2:6d026d5655c5 164 }
JornD 2:6d026d5655c5 165
JornD 5:77929f5f1f32 166 void Run_Move(void)
JornD 5:77929f5f1f32 167 {
JordanO 13:f90e31c6af2b 168 pc.printf("Starting Move ... \r\n");
JornD 5:77929f5f1f32 169 }
JornD 5:77929f5f1f32 170
JornD 5:77929f5f1f32 171 void Run_TiltCup(void)
JornD 5:77929f5f1f32 172 {
JordanO 11:32deb48774f7 173 pc.printf("Starting Calibration TiltCup ... \r\n");
JornD 5:77929f5f1f32 174 }
JornD 5:77929f5f1f32 175
JornD 5:77929f5f1f32 176 void Run_FailState(void)
Rieks 6:41b02057fc2c 177 {
JordanO 14:1a695fc45fc6 178 pc.printf("Error: %i",errorCode);
JornD 5:77929f5f1f32 179 }
JornD 5:77929f5f1f32 180
JordanO 11:32deb48774f7 181
JornD 5:77929f5f1f32 182 //State Machine
JornD 2:6d026d5655c5 183 void StateMachine(void)
JornD 2:6d026d5655c5 184 {
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 24:d0ca537913c2 230 //Main Loop, constantly running function
JornD 8:ccd58f78b5cb 231 void mainloop()
JornD 8:ccd58f78b5cb 232 {
JornD 9:cb88b16a97d5 233 StateMachine();
JornD 8:ccd58f78b5cb 234 }
JornD 8:ccd58f78b5cb 235
JornD 24:d0ca537913c2 236 //The main function
JornD 1:a5c1140f464a 237 int main()
JornD 8:ccd58f78b5cb 238 {
JornD 24:d0ca537913c2 239 //-Initialize
JornD 24:d0ca537913c2 240 //--Turning LEDs off
JornD 24:d0ca537913c2 241 ledr = true;
JornD 24:d0ca537913c2 242 ledg = true;
JornD 24:d0ca537913c2 243 ledb = true;
JornD 24:d0ca537913c2 244 //--Set baud
JornD 24:d0ca537913c2 245 pc.baud(115200);
JornD 24:d0ca537913c2 246 //--Set first state
JornD 24:d0ca537913c2 247 CurrentState = Startup;
JornD 24:d0ca537913c2 248 //--Setup Buttons (Placeholder for testing)
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
JornD 24:d0ca537913c2 254 //-Activate 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);
JornD 16:fa8001fef71b 258
JornD 16:fa8001fef71b 259 //Placeholder function call
JornD 24:d0ca537913c2 260 //double PlantError = 1;
JornD 24:d0ca537913c2 261 //double Ts = 1;
JornD 24:d0ca537913c2 262 //double u = ControllerPID(1, 1);
JornD 24:d0ca537913c2 263 //X = 1;
JornD 24:d0ca537913c2 264 //double Y = ProcessEMG(X);
JornD 24:d0ca537913c2 265 int x;
JornD 24:d0ca537913c2 266 int a;
JornD 24:d0ca537913c2 267 a = 3;
JornD 24:d0ca537913c2 268 int b;
JornD 24:d0ca537913c2 269 b = 8;
JornD 24:d0ca537913c2 270 x = AddInt(a,b);
JordanO 11:32deb48774f7 271
JornD 24:d0ca537913c2 272 //-Constantly running function
JornD 1:a5c1140f464a 273 while(true)
JornD 1:a5c1140f464a 274 {
JornD 24:d0ca537913c2 275
JornD 1:a5c1140f464a 276 }
JornD 1:a5c1140f464a 277 }