MODSERIAL PID controller edit

Dependencies:   HIDScope MODSERIAL QEI biquadFilter mbed

Fork of PID_controller_Motor by BioBitches TN

Committer:
MBroek
Date:
Mon Oct 24 11:59:27 2016 +0000
Revision:
19:35f3da6c6969
Parent:
18:6cfe248b2290
Child:
20:2fdb069ffcae
Voor jochem

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MBroek 0:9e053ed05c69 1
MBroek 0:9e053ed05c69 2
MBroek 0:9e053ed05c69 3 // HET DEFINIEREN VAN ALLES ==========================================================================================
MBroek 0:9e053ed05c69 4
MBroek 0:9e053ed05c69 5 // Includen van alle libraries ---------------------------------------
MBroek 0:9e053ed05c69 6 #include "mbed.h"
MBroek 0:9e053ed05c69 7 #include "MODSERIAL.h"
MBroek 0:9e053ed05c69 8 #include "QEI.h"
MBroek 0:9e053ed05c69 9 #include "math.h"
MBroek 3:581c5918b590 10 #include "HIDScope.h"
MBroek 3:581c5918b590 11
MBroek 3:581c5918b590 12 // Definieren van de HIDscope ----------------------------------------
MBroek 7:435f984781ab 13 HIDScope scope(3);
MBroek 0:9e053ed05c69 14
MBroek 0:9e053ed05c69 15
MBroek 0:9e053ed05c69 16 // Definieren van de Serial en Encoder -------------------------------
MBroek 0:9e053ed05c69 17 MODSERIAL pc(USBTX, USBRX);
MBroek 0:9e053ed05c69 18 #define SERIALBAUD 115200
MBroek 0:9e053ed05c69 19
MBroek 0:9e053ed05c69 20 QEI encoder_motor1(D10,D11,NC,64);
MBroek 0:9e053ed05c69 21 QEI encoder_motor2(D12,D13,NC,64);
MBroek 0:9e053ed05c69 22
MBroek 0:9e053ed05c69 23
MBroek 0:9e053ed05c69 24 // Definieren van de Motorpins ---------------------------------------
MBroek 0:9e053ed05c69 25 DigitalOut motor1_direction_pin(D7);
MBroek 0:9e053ed05c69 26 PwmOut motor1_speed_pin(D6);
MBroek 0:9e053ed05c69 27
MBroek 0:9e053ed05c69 28 DigitalOut motor2_direction_pin(D4);
MBroek 0:9e053ed05c69 29 PwmOut motor2_speed_pin(D5);
MBroek 0:9e053ed05c69 30
MBroek 0:9e053ed05c69 31
MBroek 0:9e053ed05c69 32 //Definieren van bord-elementen --------------------------------------
MBroek 19:35f3da6c6969 33 InterruptIn motor_switch_button(D3);
MBroek 19:35f3da6c6969 34 InterruptIn state_switch_button(D2);
MBroek 17:525b785f007a 35 DigitalIn EMG_sim1(SW2);
MBroek 17:525b785f007a 36 DigitalIn EMG_sim2(SW3);
MBroek 17:525b785f007a 37
MBroek 1:5b3fa8e47e8b 38 AnalogIn pot1(A1); // Dit is de gesimuleerde emg1
MBroek 1:5b3fa8e47e8b 39 AnalogIn pot2(A2); // Dit is de gesimuleerde emg2
MBroek 0:9e053ed05c69 40
MBroek 13:b0d3c547bf2f 41
MBroek 13:b0d3c547bf2f 42 DigitalOut ledred(LED_RED, 1);
MBroek 13:b0d3c547bf2f 43 DigitalOut ledgreen(LED_GREEN, 1);
MBroek 16:5a749b319276 44 DigitalOut ledblue(LED_BLUE, 1);
MBroek 13:b0d3c547bf2f 45
MBroek 0:9e053ed05c69 46
MBroek 4:6524b198721f 47 //Definieren van de tickers ------------------------------------------
MBroek 17:525b785f007a 48 Ticker motor_ticker; // Deze ticker activeert het motor_runs programma, dit leest motor pos en ref pos uit, rekent de PID uit en stuurt met dit de motoren
MBroek 4:6524b198721f 49 Ticker hidscope_ticker;
MBroek 4:6524b198721f 50
MBroek 4:6524b198721f 51
MBroek 0:9e053ed05c69 52
MBroek 0:9e053ed05c69 53 // HET VASTSTELLEN VAN ALLE TE GEBRUIKEN VARIABELEN EN CONSTANTEN ======================================================
MBroek 4:6524b198721f 54
MBroek 16:5a749b319276 55 enum states_enum{off, init_m1, init_m2, finish_init_m1, finish_init_m2, run}; // De states waar de main loop doorheen loopt, off is uit, init is intialiseren en run is het aanturen vd motoren met emg.
MBroek 14:f51d51395803 56 states_enum states = off;
MBroek 14:f51d51395803 57
MBroek 13:b0d3c547bf2f 58 double error_prev_1_in = 0.0, error_int_1_in = 0.0; // De error waardes voor het initialiseren
MBroek 13:b0d3c547bf2f 59 double PID_output_1_in = 0.0; // De PID output voor het initialiseren
MBroek 16:5a749b319276 60
MBroek 16:5a749b319276 61 double error_prev_2_in = 0.0, error_int_2_in = 0.0; // De error waardes voor het initialiseren
MBroek 16:5a749b319276 62 double PID_output_2_in = 0.0; // De PID output voor het initialiseren
MBroek 16:5a749b319276 63
MBroek 4:6524b198721f 64 double position_motor1;
MBroek 4:6524b198721f 65
MBroek 4:6524b198721f 66 int counts1; // Pulses van motoren
MBroek 4:6524b198721f 67 int counts2;
MBroek 0:9e053ed05c69 68
MBroek 0:9e053ed05c69 69 const double pi = 3.14159265358979323846264338327950288419716939937510; // pi
MBroek 15:3f3d87513a6b 70 const double rad_per_count = 2.0*pi/8400.0; // Aantal rad per puls uit encoder
MBroek 0:9e053ed05c69 71
MBroek 11:91613b22bc00 72 const double radius_tandwiel = 1.0;
MBroek 9:f735baee0c2b 73 const double meter_per_count = rad_per_count * radius_tandwiel; // Het aantal meter dat het karretje aflegt per puls, DIT IS NOG ONBEKEND!!!
MBroek 1:5b3fa8e47e8b 74
MBroek 4:6524b198721f 75 double error1_int = 0.00000; // Initiele error integral waardes
MBroek 4:6524b198721f 76 double error2_int = 0.00000;
MBroek 0:9e053ed05c69 77
MBroek 0:9e053ed05c69 78 const double T_getpos = 0.01; // Periode van de frequentie van het aanroepen van de positiechecker (get_position)
MBroek 0:9e053ed05c69 79
MBroek 4:6524b198721f 80 volatile bool flag1 = false, flag2 = false; // De flags voor de functies aangeroepen door de tickers
MBroek 4:6524b198721f 81
MBroek 15:3f3d87513a6b 82 const double Kp_1 = 0.1; // De PID variablen voor motor 1
MBroek 15:3f3d87513a6b 83 const double Kd_1 = 0.01;
MBroek 15:3f3d87513a6b 84 const double Ki_1 = 0.01;
MBroek 4:6524b198721f 85
MBroek 9:f735baee0c2b 86 const double Kp_2 = 1.0000000; // De PID variablen voor motor 2
MBroek 9:f735baee0c2b 87 const double Kd_2 = 0.1;
MBroek 9:f735baee0c2b 88 const double Ki_2 = 0.3;
MBroek 5:c510ab61af28 89
MBroek 9:f735baee0c2b 90 const double vrijheid_m1_rad = 0.5*pi; // Dit is de uiterste postitie vd arm in radialen
MBroek 9:f735baee0c2b 91 const double vrijheid_m2_meter = 0.25; // Dit is de helft vd arm, dit is wat het karretje heen en weer kan bewegen
MBroek 5:c510ab61af28 92
MBroek 12:8aba69d8d0d0 93 const double starting_pos_m1 = 0.5*pi; // Startin posities van de motoren
MBroek 13:b0d3c547bf2f 94 const double starting_pos_m2 = 0.25;
MBroek 11:91613b22bc00 95
MBroek 13:b0d3c547bf2f 96 double reference_position_motor1 = 0; // Dit zijn de eerste posities waar de motoren heen willen bij de initialisatie
MBroek 10:755b9228cc42 97 double reference_position_motor2 = 0;
MBroek 9:f735baee0c2b 98
MBroek 13:b0d3c547bf2f 99 double PID_output_1 = 0.0; // De eerste PID_output, deze is nul anders gaan de motoren draaien
MBroek 13:b0d3c547bf2f 100 double PID_output_2 = 0.0;
MBroek 5:c510ab61af28 101
MBroek 13:b0d3c547bf2f 102 double error_prev_1 = 0.0; // De initiele previous error
MBroek 13:b0d3c547bf2f 103 double error_int_1 = 0.0; // De initiele intergral error
MBroek 10:755b9228cc42 104
MBroek 13:b0d3c547bf2f 105 double error_prev_2 = 0.0;
MBroek 13:b0d3c547bf2f 106 double error_int_2 = 0.0;
MBroek 5:c510ab61af28 107
MBroek 17:525b785f007a 108 enum which_motor{motor1, motor2}; // enum van de motoren
MBroek 15:3f3d87513a6b 109 which_motor motor_that_runs = motor1;
MBroek 15:3f3d87513a6b 110
MBroek 9:f735baee0c2b 111
MBroek 0:9e053ed05c69 112
MBroek 0:9e053ed05c69 113
MBroek 0:9e053ed05c69 114
MBroek 0:9e053ed05c69 115
MBroek 0:9e053ed05c69 116 // ALLE FUNCTIES BUITEN DE MAIN-LOOP ====================================================================================
MBroek 0:9e053ed05c69 117
MBroek 13:b0d3c547bf2f 118
MBroek 15:3f3d87513a6b 119 // De statechanger -----------------------------------------------------------
MBroek 15:3f3d87513a6b 120 void state_changer(){
MBroek 15:3f3d87513a6b 121 if(states == off){
MBroek 15:3f3d87513a6b 122 states = init_m1;
MBroek 15:3f3d87513a6b 123 }
MBroek 16:5a749b319276 124 else if(states == init_m1){
MBroek 16:5a749b319276 125 states = finish_init_m1;
MBroek 16:5a749b319276 126 }
MBroek 16:5a749b319276 127 else if(states == finish_init_m1){
MBroek 16:5a749b319276 128 states = init_m2;
MBroek 16:5a749b319276 129 }
MBroek 16:5a749b319276 130 else if(states == init_m2){
MBroek 16:5a749b319276 131 states = finish_init_m2;
MBroek 16:5a749b319276 132 }
MBroek 16:5a749b319276 133 else if(states == finish_init_m2){
MBroek 16:5a749b319276 134 states = run;
MBroek 16:5a749b319276 135 }
MBroek 16:5a749b319276 136 else{
MBroek 16:5a749b319276 137 states = off;
MBroek 16:5a749b319276 138 }
MBroek 16:5a749b319276 139 }
MBroek 16:5a749b319276 140
MBroek 13:b0d3c547bf2f 141
MBroek 9:f735baee0c2b 142 // Functie voor het switchen tussen de motors ------------------------------
MBroek 9:f735baee0c2b 143 void motor_switch(){
MBroek 15:3f3d87513a6b 144 if(motor_that_runs == motor1){
MBroek 15:3f3d87513a6b 145 motor_that_runs = motor2;
MBroek 15:3f3d87513a6b 146 }
MBroek 15:3f3d87513a6b 147 else{
MBroek 15:3f3d87513a6b 148 motor_that_runs = motor1;
MBroek 15:3f3d87513a6b 149 }
MBroek 16:5a749b319276 150 }
MBroek 15:3f3d87513a6b 151
MBroek 9:f735baee0c2b 152
MBroek 9:f735baee0c2b 153
MBroek 1:5b3fa8e47e8b 154 // Functie voor het vinden van de positie van motor 1 ---------------------
MBroek 13:b0d3c547bf2f 155 double get_position_m1(const double radpercount){ //returned de positie van de motor in radialen (positie vd arm in radialen)
MBroek 0:9e053ed05c69 156 counts1 = encoder_motor1.getPulses(); // Leest aantal pulses uit encoder af
MBroek 13:b0d3c547bf2f 157 return radpercount * counts1; // rekent positie motor1 uit en geeft deze als output vd functie
MBroek 1:5b3fa8e47e8b 158 }
MBroek 1:5b3fa8e47e8b 159
MBroek 1:5b3fa8e47e8b 160
MBroek 1:5b3fa8e47e8b 161 // Functie voor vinden van de positie van motor 2 -----------------------------
MBroek 13:b0d3c547bf2f 162 double get_position_m2(const double meterpercount){ // returned de positie van het karretje in meter
MBroek 1:5b3fa8e47e8b 163 counts2 = encoder_motor2.getPulses(); // leest aantal pulses vd encoder af
MBroek 13:b0d3c547bf2f 164 return meterpercount * counts2; // rekent de positie van het karretje uit en geeft dit als output vd functie
MBroek 1:5b3fa8e47e8b 165 }
MBroek 1:5b3fa8e47e8b 166
MBroek 1:5b3fa8e47e8b 167
MBroek 5:c510ab61af28 168 // Functie voor het vinden van de reference position van motor 1 --------------------
MBroek 13:b0d3c547bf2f 169 double get_reference_position_m1(const double aantal_rad){
MBroek 18:6cfe248b2290 170 double ref_pos = EMG_sim1.read() - EMG_sim2.read(); // De reference position als output (zit tussen -1 en 1, -1 is maximaal links en 1 is maximaal rechts)
MBroek 13:b0d3c547bf2f 171 return ref_pos * aantal_rad; // Aantal rad is de uiterste positie vd arm in radialen
MBroek 5:c510ab61af28 172 }
MBroek 5:c510ab61af28 173
MBroek 5:c510ab61af28 174
MBroek 5:c510ab61af28 175 // Functie voor het vinden van de reference position van motor 2 --------------------
MBroek 13:b0d3c547bf2f 176 double get_reference_position_m2(const double aantal_meter){
MBroek 18:6cfe248b2290 177 double ref_pos = EMG_sim1.read() - EMG_sim2.read(); // De reference position als output (zit tussen -1 en 1, -1 is maximaal links en 1 is maximaal rechts)
MBroek 13:b0d3c547bf2f 178 return ref_pos * aantal_meter; // Aantal meter is hoeveelheid radialen van middelpunt tot minima.
MBroek 1:5b3fa8e47e8b 179 }
MBroek 0:9e053ed05c69 180
MBroek 3:581c5918b590 181
MBroek 3:581c5918b590 182 // HIDScope functie ----------------------------------------------------------------------
MBroek 7:435f984781ab 183 void set_scope(double input1, double input2, double input3){
MBroek 7:435f984781ab 184 scope.set(0, input1);
MBroek 7:435f984781ab 185 scope.set(1, input2);
MBroek 7:435f984781ab 186 scope.set(2, input3);
MBroek 3:581c5918b590 187 scope.send();
MBroek 3:581c5918b590 188 }
MBroek 3:581c5918b590 189
MBroek 0:9e053ed05c69 190
MBroek 1:5b3fa8e47e8b 191 // De PID-controller voor de motors -------------------------------------------------
MBroek 6:e0857842e8cd 192 double PID_controller(double ref_pos, double mot_pos, double &e_prev, double &e_int, const double Kp, const double Kd, const double Ki){
MBroek 0:9e053ed05c69 193 double error = ref_pos - mot_pos; // error uitrekenen
MBroek 6:e0857842e8cd 194 double error_dif = (error-e_prev)/T_getpos; // De error differentieren
MBroek 1:5b3fa8e47e8b 195 //error_dif = ..... // Filter biquad poep
MBroek 6:e0857842e8cd 196 e_prev = error; // Hier wordt de error opgeslagen voor de volgende keer
MBroek 6:e0857842e8cd 197 e_int = e_int + T_getpos*error; // De error integreren
MBroek 6:e0857842e8cd 198 return Kp*error + Ki*e_int + Kd*error_dif; // De uiteindelijke PID output
MBroek 0:9e053ed05c69 199 }
MBroek 0:9e053ed05c69 200
MBroek 0:9e053ed05c69 201
MBroek 2:6bef5397e8a9 202 // Motor 1 besturen ---------------------------------------------------------------------
MBroek 2:6bef5397e8a9 203 void set_motor1(double motor_input){ // functie die de motor aanstuurt mt als input de PID-output
MBroek 2:6bef5397e8a9 204 if (motor_input >= 0){ // Dit checkt welke kant de motor op moet draaien
MBroek 2:6bef5397e8a9 205 motor1_direction_pin = 1; // Clockwise
MBroek 2:6bef5397e8a9 206 }
MBroek 2:6bef5397e8a9 207 else {
MBroek 2:6bef5397e8a9 208 motor1_direction_pin = 0; // CounterClockwise
MBroek 2:6bef5397e8a9 209 }
MBroek 2:6bef5397e8a9 210 if (fabs(motor_input)>1){ // Dit fixed de PwmOutput op maximaal 1
MBroek 2:6bef5397e8a9 211 motor_input = 1;
MBroek 2:6bef5397e8a9 212 }
MBroek 2:6bef5397e8a9 213 motor1_speed_pin = fabs(motor_input); // Dit geeft de uiteindelijke input door aan de motor
MBroek 2:6bef5397e8a9 214 }
MBroek 2:6bef5397e8a9 215
MBroek 2:6bef5397e8a9 216
MBroek 2:6bef5397e8a9 217 // Motor 2 besturen ---------------------------------------------------------------------
MBroek 2:6bef5397e8a9 218 void set_motor2(double motor_input){ // functie die de motor aanstuurt mt als input de PID-output
MBroek 2:6bef5397e8a9 219 if (motor_input >= 0){ // Dit checkt welke kant de motor op moet draaien
MBroek 2:6bef5397e8a9 220 motor2_direction_pin = 1; // Clockwise
MBroek 2:6bef5397e8a9 221 }
MBroek 2:6bef5397e8a9 222 else {
MBroek 2:6bef5397e8a9 223 motor2_direction_pin = 0; // CounterClockwise
MBroek 2:6bef5397e8a9 224 }
MBroek 2:6bef5397e8a9 225 if (fabs(motor_input)>1){ // Dit fixed de PwmOutput op maximaal 1
MBroek 2:6bef5397e8a9 226 motor_input = 1;
MBroek 2:6bef5397e8a9 227 }
MBroek 2:6bef5397e8a9 228 motor2_speed_pin = fabs(motor_input); // Dit geeft de uiteindelijke input door aan de motor
MBroek 2:6bef5397e8a9 229 }
MBroek 2:6bef5397e8a9 230
MBroek 0:9e053ed05c69 231
MBroek 4:6524b198721f 232 // De go-flag functies -----------------------------------------------------------------
MBroek 4:6524b198721f 233 void flag1_activate(){flag1=true;} // Activeert de flag
MBroek 14:f51d51395803 234 void flag2_activate(){flag2=true;}
MBroek 14:f51d51395803 235
MBroek 14:f51d51395803 236
MBroek 16:5a749b319276 237 // De initialiseren functie van motor 1 ------------------------------------------------------------
MBroek 17:525b785f007a 238 void initialise_m1(){ // Deze functie laat de motor van een vaste uiterste positie (fysisch limiet) naar het middelpunt draaien.
MBroek 14:f51d51395803 239 if (flag1){
MBroek 14:f51d51395803 240 flag1 = false;
MBroek 14:f51d51395803 241 ledred = !ledred;
MBroek 16:5a749b319276 242 ledblue.write(1);
MBroek 17:525b785f007a 243 PID_output_1_in = PID_controller(reference_position_motor1, get_position_m1(rad_per_count)+starting_pos_m1, error_prev_1_in, error_int_1_in, Kp_1, Kd_1, Ki_1); // PID met een vaste ref pos.
MBroek 14:f51d51395803 244 set_motor1(PID_output_1_in);
MBroek 14:f51d51395803 245 }
MBroek 14:f51d51395803 246 }
MBroek 4:6524b198721f 247
MBroek 4:6524b198721f 248
MBroek 16:5a749b319276 249 // De initialiseren functie van motor 2 ------------------------------------------------------------
MBroek 17:525b785f007a 250 void initialise_m2(){ // Hetzelfde als hierboven
MBroek 16:5a749b319276 251 if (flag1){
MBroek 16:5a749b319276 252 flag1 = false;
MBroek 16:5a749b319276 253 ledblue = !ledblue;
MBroek 16:5a749b319276 254 ledgreen.write(1);
MBroek 17:525b785f007a 255 PID_output_2_in = PID_controller(reference_position_motor2, get_position_m2(meter_per_count)+starting_pos_m2, error_prev_2_in, error_int_2_in, Kp_2, Kd_2, Ki_2); // PID met vaste ref pos.
MBroek 16:5a749b319276 256 set_motor2(PID_output_2_in);
MBroek 16:5a749b319276 257 }
MBroek 16:5a749b319276 258 }
MBroek 16:5a749b319276 259
MBroek 16:5a749b319276 260
MBroek 16:5a749b319276 261 // De functies voor het afronden van de initialisatie ----------------------------------------
MBroek 17:525b785f007a 262 void finish_initialising_m2(){ // Deze functie rond het initialiseren af, hij reset de encoder en zet de motor uit
MBroek 16:5a749b319276 263 encoder_motor2.reset();
MBroek 16:5a749b319276 264 ledblue.write(1);
MBroek 16:5a749b319276 265 ledred.write(0);
MBroek 16:5a749b319276 266 motor2_speed_pin = 0;
MBroek 16:5a749b319276 267 }
MBroek 16:5a749b319276 268
MBroek 16:5a749b319276 269
MBroek 16:5a749b319276 270 // De functies voor het afronden van de initialisatie ----------------------------------------
MBroek 17:525b785f007a 271 void finish_initialising_m1(){ // Zelfde als hierboven
MBroek 17:525b785f007a 272 encoder_motor1.reset();
MBroek 16:5a749b319276 273 ledred.write(1);
MBroek 16:5a749b319276 274 ledgreen.write(0);
MBroek 16:5a749b319276 275 motor1_speed_pin = 0;
MBroek 16:5a749b319276 276 }
MBroek 16:5a749b319276 277
MBroek 16:5a749b319276 278
MBroek 16:5a749b319276 279
MBroek 15:3f3d87513a6b 280 // De functie die de motoren aanstuurt -------------------------------------------------
MBroek 17:525b785f007a 281 void running_motors(){ // Deze functie kijkt welke motor moet draaien en rekent dan de PID uit en geeft dit door aan de motor input functie
MBroek 15:3f3d87513a6b 282 if (flag1){
MBroek 15:3f3d87513a6b 283 flag1 = false;
MBroek 16:5a749b319276 284 ledred.write(1);
MBroek 15:3f3d87513a6b 285 ledgreen = !ledgreen;
MBroek 15:3f3d87513a6b 286 switch (motor_that_runs){
MBroek 15:3f3d87513a6b 287 case motor1 : // In deze case draait alleen motor 1
MBroek 15:3f3d87513a6b 288 PID_output_1 = PID_controller(get_reference_position_m1(vrijheid_m1_rad), get_position_m1(rad_per_count), error_prev_1, error_int_1, Kp_1, Kd_1, Ki_1);
MBroek 15:3f3d87513a6b 289 set_motor1(PID_output_1);
MBroek 15:3f3d87513a6b 290 break;
MBroek 15:3f3d87513a6b 291 case motor2 :
MBroek 15:3f3d87513a6b 292 PID_output_2 = PID_controller(get_reference_position_m2(vrijheid_m2_meter), get_position_m2(meter_per_count), error_prev_2, error_int_2, Kp_2, Kd_2, Ki_2);
MBroek 15:3f3d87513a6b 293 set_motor2(PID_output_2);
MBroek 15:3f3d87513a6b 294 break;
MBroek 15:3f3d87513a6b 295 }
MBroek 15:3f3d87513a6b 296 }
MBroek 15:3f3d87513a6b 297 }
MBroek 15:3f3d87513a6b 298
MBroek 15:3f3d87513a6b 299
MBroek 16:5a749b319276 300 // Dit doet de robot als hij niets doet ------------------------------------------------------
MBroek 16:5a749b319276 301 void robot_is_off(){
MBroek 17:525b785f007a 302 ledgreen.write(1);
MBroek 17:525b785f007a 303 ledblue.write(0); // Indicator ik ben uit
MBroek 17:525b785f007a 304 motor1_speed_pin = 0; // Uitzetten vd motoren
MBroek 16:5a749b319276 305 motor2_speed_pin = 0;
MBroek 16:5a749b319276 306 }
MBroek 16:5a749b319276 307
MBroek 16:5a749b319276 308
MBroek 15:3f3d87513a6b 309 // De HIDscope debug functie ----------------------------------------------------------------
MBroek 17:525b785f007a 310 void call_HIDscope(double input_1, double input_2, double input_3){ // Deze functie roept de HIDscope aan
MBroek 15:3f3d87513a6b 311 if (flag2){
MBroek 15:3f3d87513a6b 312 flag2 = false;
MBroek 15:3f3d87513a6b 313 set_scope(input_1, input_2, input_3);
MBroek 15:3f3d87513a6b 314 }
MBroek 15:3f3d87513a6b 315 }
MBroek 15:3f3d87513a6b 316
MBroek 15:3f3d87513a6b 317
MBroek 15:3f3d87513a6b 318
MBroek 0:9e053ed05c69 319
MBroek 0:9e053ed05c69 320 // DE MAIN =================================================================================================================
MBroek 0:9e053ed05c69 321 int main()
MBroek 0:9e053ed05c69 322 {
MBroek 0:9e053ed05c69 323 pc.baud(SERIALBAUD);
MBroek 0:9e053ed05c69 324
MBroek 16:5a749b319276 325 state_switch_button.fall(&state_changer); // Switcht states
MBroek 17:525b785f007a 326 motor_switch_button.fall(&motor_switch); // Switcht motors
MBroek 16:5a749b319276 327
MBroek 17:525b785f007a 328
MBroek 13:b0d3c547bf2f 329
MBroek 17:525b785f007a 330 motor_ticker.attach(&flag1_activate,0.1); // Activeert de go-flag van motor positie
MBroek 17:525b785f007a 331 hidscope_ticker.attach(&flag2_activate,0.01); // Leest ref pos en mot pos uit, rekent PID uit en stuurt motoren aan.
MBroek 13:b0d3c547bf2f 332
MBroek 16:5a749b319276 333 while(1){
MBroek 14:f51d51395803 334 switch(states){
MBroek 16:5a749b319276 335 case off : // Dan staat het programma stil en gebeurt er niks
MBroek 16:5a749b319276 336 robot_is_off();
MBroek 14:f51d51395803 337 break;
MBroek 14:f51d51395803 338 case init_m1 : // Hier voert hij alleen het initialiseren van motor 1 uit
MBroek 15:3f3d87513a6b 339 initialise_m1();
MBroek 14:f51d51395803 340 break;
MBroek 17:525b785f007a 341 case finish_init_m1 : // Hier beeindigt hij het initialiseren
MBroek 16:5a749b319276 342 finish_initialising_m1();
MBroek 16:5a749b319276 343 break;
MBroek 16:5a749b319276 344 case init_m2 :
MBroek 17:525b785f007a 345 initialise_m2(); // Voert de initialsatie van motor 2 uit
MBroek 16:5a749b319276 346 break;
MBroek 16:5a749b319276 347 case finish_init_m2 :
MBroek 17:525b785f007a 348 finish_initialising_m2(); // beeindigt de initialisatie van motor 2
MBroek 16:5a749b319276 349 break;
MBroek 15:3f3d87513a6b 350 case run :
MBroek 17:525b785f007a 351 running_motors(); // Hier voert hij het programma voor het aansturen vd motors uit
MBroek 15:3f3d87513a6b 352 break;
MBroek 14:f51d51395803 353
MBroek 15:3f3d87513a6b 354 }
MBroek 15:3f3d87513a6b 355 call_HIDscope(PID_output_1_in, get_reference_position_m1(vrijheid_m1_rad), get_position_m1(meter_per_count));
MBroek 15:3f3d87513a6b 356 }
MBroek 15:3f3d87513a6b 357 }
MBroek 14:f51d51395803 358
MBroek 14:f51d51395803 359
MBroek 14:f51d51395803 360
MBroek 14:f51d51395803 361
MBroek 14:f51d51395803 362
MBroek 14:f51d51395803 363
MBroek 14:f51d51395803 364
MBroek 14:f51d51395803 365
MBroek 0:9e053ed05c69 366
MBroek 0:9e053ed05c69 367
MBroek 0:9e053ed05c69 368
MBroek 0:9e053ed05c69 369
MBroek 0:9e053ed05c69 370
MBroek 0:9e053ed05c69 371
MBroek 0:9e053ed05c69 372
MBroek 0:9e053ed05c69 373
MBroek 0:9e053ed05c69 374
MBroek 0:9e053ed05c69 375
MBroek 0:9e053ed05c69 376
MBroek 0:9e053ed05c69 377
MBroek 0:9e053ed05c69 378
MBroek 0:9e053ed05c69 379
MBroek 0:9e053ed05c69 380
MBroek 0:9e053ed05c69 381
MBroek 0:9e053ed05c69 382
MBroek 0:9e053ed05c69 383
MBroek 0:9e053ed05c69 384
MBroek 0:9e053ed05c69 385
MBroek 0:9e053ed05c69 386
MBroek 0:9e053ed05c69 387
MBroek 0:9e053ed05c69 388
MBroek 0:9e053ed05c69 389
MBroek 0:9e053ed05c69 390
MBroek 0:9e053ed05c69 391
MBroek 0:9e053ed05c69 392
MBroek 0:9e053ed05c69 393
MBroek 0:9e053ed05c69 394
MBroek 0:9e053ed05c69 395
MBroek 0:9e053ed05c69 396
MBroek 0:9e053ed05c69 397
MBroek 0:9e053ed05c69 398
MBroek 0:9e053ed05c69 399
MBroek 0:9e053ed05c69 400
MBroek 0:9e053ed05c69 401
MBroek 0:9e053ed05c69 402
MBroek 0:9e053ed05c69 403
MBroek 0:9e053ed05c69 404
MBroek 0:9e053ed05c69 405
MBroek 0:9e053ed05c69 406
MBroek 0:9e053ed05c69 407
MBroek 0:9e053ed05c69 408
MBroek 0:9e053ed05c69 409
MBroek 0:9e053ed05c69 410
MBroek 0:9e053ed05c69 411
MBroek 0:9e053ed05c69 412
MBroek 0:9e053ed05c69 413
MBroek 0:9e053ed05c69 414
MBroek 0:9e053ed05c69 415
MBroek 0:9e053ed05c69 416
MBroek 0:9e053ed05c69 417
MBroek 0:9e053ed05c69 418
MBroek 0:9e053ed05c69 419