Jorn Dokter / Mbed 2 deprecated TEB_branch2

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
JornD
Date:
Mon Oct 14 11:46:35 2019 +0000
Revision:
40:82addb417220
Parent:
33:5e2e95c322da
Child:
48:39f84359998a
Added some files and commented out Jordan's code;

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