Carlmaykel Orman / Mbed 2 deprecated NR_method_1

Dependencies:   HIDScope QEI biquadFilter mbed

Fork of NR_method by Thijs Rakels

Committer:
Thijsjeee
Date:
Thu Nov 01 11:36:28 2018 +0000
Revision:
5:d3031d082c22
Parent:
4:f16a18aa58bd
Child:
6:e492bc8fc3fb
voor ed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Thijsjeee 0:0af507ea0d83 1 #include "mbed.h"
Thijsjeee 0:0af507ea0d83 2 #include "BiQuad.h"
Thijsjeee 0:0af507ea0d83 3 #include <math.h>
Thijsjeee 0:0af507ea0d83 4 #include <stdio.h>
Thijsjeee 0:0af507ea0d83 5 #include <iostream>
Thijsjeee 0:0af507ea0d83 6 #include <stdlib.h>
Thijsjeee 0:0af507ea0d83 7 #include <ctime>
Thijsjeee 0:0af507ea0d83 8 #include <QEI.h>
Thijsjeee 1:fafea1d00d0c 9 #include "PID_controler.h"
Thijsjeee 1:fafea1d00d0c 10 //#include <MODSERIAL.h>
Thijsjeee 1:fafea1d00d0c 11
Thijsjeee 5:d3031d082c22 12 // hidscope
Thijsjeee 5:d3031d082c22 13 HIDScope scope( 2 );
Thijsjeee 5:d3031d082c22 14
Thijsjeee 1:fafea1d00d0c 15 bool bas;
Thijsjeee 2:f68fd7b1c655 16 int waiting;
Thijsjeee 2:f68fd7b1c655 17 InterruptIn button(SW3);
Thijsjeee 1:fafea1d00d0c 18
Thijsjeee 1:fafea1d00d0c 19 Serial pc(USBTX, USBRX);
Thijsjeee 1:fafea1d00d0c 20 // emg signals input
Thijsjeee 1:fafea1d00d0c 21 AnalogIn emg1(A0);
Thijsjeee 1:fafea1d00d0c 22 AnalogIn emg2(A1);
Thijsjeee 1:fafea1d00d0c 23 InterruptIn sw2(SW2);
Thijsjeee 1:fafea1d00d0c 24 // tickers
Thijsjeee 1:fafea1d00d0c 25 Ticker sample_timer;
Thijsjeee 1:fafea1d00d0c 26
Thijsjeee 1:fafea1d00d0c 27 volatile int x1;
Thijsjeee 1:fafea1d00d0c 28 volatile int y1;
Thijsjeee 1:fafea1d00d0c 29 double emgFiltered3;
Thijsjeee 1:fafea1d00d0c 30 double emgFiltered23;
Thijsjeee 1:fafea1d00d0c 31 bool dir = true;
Thijsjeee 1:fafea1d00d0c 32 // filtering
Thijsjeee 1:fafea1d00d0c 33 //filter coeffiecents
Thijsjeee 1:fafea1d00d0c 34 // highpass
Thijsjeee 1:fafea1d00d0c 35 double b01h = 0.978030479206560;
Thijsjeee 1:fafea1d00d0c 36 double b02h = -1.95606095841312;
Thijsjeee 1:fafea1d00d0c 37 double b03h = 0.978030479206560;
Thijsjeee 1:fafea1d00d0c 38 double a01h = -1.95557824031504;
Thijsjeee 1:fafea1d00d0c 39 double a02h = 0.956543676511203;
Thijsjeee 1:fafea1d00d0c 40 // notchfilter
Thijsjeee 1:fafea1d00d0c 41 double b01n = 0.995532032687234;
Thijsjeee 1:fafea1d00d0c 42 double b02n = -1.89361445373551;
Thijsjeee 1:fafea1d00d0c 43 double b03n = 0.995532032687234;
Thijsjeee 1:fafea1d00d0c 44 double a01n = -1.89361445373551;
Thijsjeee 1:fafea1d00d0c 45 double a02n = 0.991064065374468 ;
Thijsjeee 1:fafea1d00d0c 46 //lowpass 1
Thijsjeee 1:fafea1d00d0c 47 double b01l = 8.76555487540065e-05;
Thijsjeee 1:fafea1d00d0c 48 double b02l = 0.000175311097508013;
Thijsjeee 1:fafea1d00d0c 49 double b03l = 8.76555487540065e-05;
Thijsjeee 1:fafea1d00d0c 50 double a01l = -1.97334424978130;
Thijsjeee 1:fafea1d00d0c 51 double a02l = 0.973694871976315;
Thijsjeee 1:fafea1d00d0c 52
Thijsjeee 1:fafea1d00d0c 53 BiQuadChain bqc;
Thijsjeee 1:fafea1d00d0c 54 BiQuad bq1( b01h, b02h, b03h, a01h, a02h ); //highpass
Thijsjeee 1:fafea1d00d0c 55 BiQuad bq2( b01n, b02n, b03n, a01n, a02n ); //notch
Thijsjeee 1:fafea1d00d0c 56 // than we need to rectifie
Thijsjeee 1:fafea1d00d0c 57 // and lowpass afterwards
Thijsjeee 1:fafea1d00d0c 58 BiQuadChain bqc2;
Thijsjeee 1:fafea1d00d0c 59 BiQuad bq3( b01l, b02l, b03l, a01l, a02l); //lowpass
Thijsjeee 1:fafea1d00d0c 60 // optional is doing a movingaverage after
Thijsjeee 1:fafea1d00d0c 61
Thijsjeee 1:fafea1d00d0c 62 BiQuadChain bqc3;
Thijsjeee 1:fafea1d00d0c 63 BiQuad bq4( b01h, b02h, b03h, a01h, a02h ); //highpass
Thijsjeee 1:fafea1d00d0c 64 BiQuad bq5( b01n, b02n, b03n, a01n, a02n ); //notch
Thijsjeee 1:fafea1d00d0c 65 // than we need to rectifie
Thijsjeee 1:fafea1d00d0c 66 // and lowpass afterwards
Thijsjeee 1:fafea1d00d0c 67 BiQuadChain bqc4;
Thijsjeee 1:fafea1d00d0c 68 BiQuad bq6( b01l, b02l, b03l, a01l, a02l); //lowpass
Thijsjeee 1:fafea1d00d0c 69
Thijsjeee 0:0af507ea0d83 70
Thijsjeee 0:0af507ea0d83 71 //Define in/outputs
Thijsjeee 0:0af507ea0d83 72
Thijsjeee 1:fafea1d00d0c 73 int counts = 8400;
Thijsjeee 0:0af507ea0d83 74 DigitalOut Led(LED1);
Thijsjeee 0:0af507ea0d83 75 PwmOut PMW1(D5); // Motor 1
Thijsjeee 0:0af507ea0d83 76 DigitalOut M1(D4); // direction of motor 1
Thijsjeee 0:0af507ea0d83 77 PwmOut PMW2(D6); // Motor 2
Thijsjeee 0:0af507ea0d83 78 DigitalOut M2(D7); // direction of motor 2
Thijsjeee 0:0af507ea0d83 79
Thijsjeee 0:0af507ea0d83 80 //initializing Encoders
Thijsjeee 0:0af507ea0d83 81 QEI Enc1(D13,D12, NC , counts, QEI::X4_ENCODING); //Motor 1 encoder
Thijsjeee 0:0af507ea0d83 82 QEI Enc2(D11,D10, NC , counts, QEI::X4_ENCODING); // Motor 3 encoder this checks whetehter the motor has rotated
Thijsjeee 0:0af507ea0d83 83
Thijsjeee 0:0af507ea0d83 84 double Kp = 1;
Thijsjeee 2:f68fd7b1c655 85 double Ki = 1;
Thijsjeee 1:fafea1d00d0c 86 double Kd = 0.3;
Thijsjeee 0:0af507ea0d83 87 double Ts = 0.001;
Thijsjeee 0:0af507ea0d83 88
Thijsjeee 0:0af507ea0d83 89 float counts_a;
Thijsjeee 0:0af507ea0d83 90 float counts_b;
Thijsjeee 0:0af507ea0d83 91
Thijsjeee 0:0af507ea0d83 92
Thijsjeee 0:0af507ea0d83 93 //Define Variables
Thijsjeee 0:0af507ea0d83 94
Thijsjeee 0:0af507ea0d83 95 double pi = 3.14159265359;
Thijsjeee 1:fafea1d00d0c 96 int bb;
Thijsjeee 1:fafea1d00d0c 97 int bc;
Thijsjeee 0:0af507ea0d83 98 float z;
Thijsjeee 0:0af507ea0d83 99
Thijsjeee 1:fafea1d00d0c 100 double angle_a = 0; //in rad
Thijsjeee 1:fafea1d00d0c 101 double angle_b = 0.5 * pi; //in rad
Thijsjeee 0:0af507ea0d83 102
Thijsjeee 0:0af507ea0d83 103 double X0[2][1] = {{angle_a},{angle_b}};
Thijsjeee 0:0af507ea0d83 104 double X[2][1];
Thijsjeee 0:0af507ea0d83 105 double Xold[2][1];
Thijsjeee 0:0af507ea0d83 106 double fval[2][1];
Thijsjeee 0:0af507ea0d83 107 double J[2][2];
Thijsjeee 0:0af507ea0d83 108 double err[2][1];
Thijsjeee 0:0af507ea0d83 109
Thijsjeee 0:0af507ea0d83 110 double MaxIter = 20;
Thijsjeee 0:0af507ea0d83 111 double tolX = 1e-4;
Thijsjeee 1:fafea1d00d0c 112 double A = 20;
Thijsjeee 1:fafea1d00d0c 113 double B = 30;
Thijsjeee 1:fafea1d00d0c 114 double C = 20;
Thijsjeee 1:fafea1d00d0c 115 double D = 27;
Thijsjeee 1:fafea1d00d0c 116 double E = 35;
Thijsjeee 1:fafea1d00d0c 117 double ex = -35; // current position
Thijsjeee 1:fafea1d00d0c 118 double ey = 27; // current position
Thijsjeee 1:fafea1d00d0c 119 double Cxx = -35; // Goal position
Thijsjeee 1:fafea1d00d0c 120 double Cyy = 27; // Goal position
Thijsjeee 0:0af507ea0d83 121
Thijsjeee 0:0af507ea0d83 122 Ticker position_controll;
Thijsjeee 0:0af507ea0d83 123
Thijsjeee 1:fafea1d00d0c 124 void filteren ()
Thijsjeee 1:fafea1d00d0c 125 {
Thijsjeee 1:fafea1d00d0c 126 double emgSignal1 = emg1.read();
Thijsjeee 1:fafea1d00d0c 127 double emgSignal2 = emg2.read();
Thijsjeee 1:fafea1d00d0c 128
Thijsjeee 1:fafea1d00d0c 129 double emgFiltered1 = bqc.step(emgSignal1);
Thijsjeee 1:fafea1d00d0c 130 double emgFiltered2 = fabs(emgFiltered1);
Thijsjeee 1:fafea1d00d0c 131 emgFiltered3 = bqc2.step(emgFiltered2);
Thijsjeee 1:fafea1d00d0c 132
Thijsjeee 1:fafea1d00d0c 133 double emgFiltered21 = bqc3.step(emgSignal2);
Thijsjeee 1:fafea1d00d0c 134 double emgFiltered22 = fabs(emgFiltered21);
Thijsjeee 1:fafea1d00d0c 135 emgFiltered23 = bqc4.step(emgFiltered22);
Thijsjeee 1:fafea1d00d0c 136
Thijsjeee 1:fafea1d00d0c 137 }
Thijsjeee 1:fafea1d00d0c 138
Thijsjeee 1:fafea1d00d0c 139 void Position1x(double b)
Thijsjeee 1:fafea1d00d0c 140 {
Thijsjeee 1:fafea1d00d0c 141 if (b > 0.20) {
Thijsjeee 1:fafea1d00d0c 142 Cxx =x1;
Thijsjeee 1:fafea1d00d0c 143 if (dir == true) {
Thijsjeee 1:fafea1d00d0c 144 if(x1 > -46) {
Thijsjeee 1:fafea1d00d0c 145 x1 = x1-4;
Thijsjeee 1:fafea1d00d0c 146 pc.printf(" posx is %f\n\r",Cxx);
Thijsjeee 1:fafea1d00d0c 147 //return x1;
Thijsjeee 1:fafea1d00d0c 148
Thijsjeee 1:fafea1d00d0c 149 } else if ( x1 <= -46) {
Thijsjeee 1:fafea1d00d0c 150 x1 =-14;
Thijsjeee 1:fafea1d00d0c 151 //return x1;
Thijsjeee 1:fafea1d00d0c 152 } else {
Thijsjeee 1:fafea1d00d0c 153 }
Thijsjeee 1:fafea1d00d0c 154 } else {
Thijsjeee 1:fafea1d00d0c 155 if(x1 < -14) {
Thijsjeee 1:fafea1d00d0c 156 x1 = x1+4;
Thijsjeee 1:fafea1d00d0c 157 //return x1;
Thijsjeee 1:fafea1d00d0c 158
Thijsjeee 1:fafea1d00d0c 159 } else if ( x1 >= -14) {
Thijsjeee 1:fafea1d00d0c 160 x1 = -46;
Thijsjeee 1:fafea1d00d0c 161 //return x1;
Thijsjeee 1:fafea1d00d0c 162 } else {
Thijsjeee 1:fafea1d00d0c 163 }
Thijsjeee 1:fafea1d00d0c 164 }
Thijsjeee 1:fafea1d00d0c 165
Thijsjeee 1:fafea1d00d0c 166 wait(0.5);
Thijsjeee 1:fafea1d00d0c 167 }
Thijsjeee 1:fafea1d00d0c 168 }
Thijsjeee 1:fafea1d00d0c 169
Thijsjeee 1:fafea1d00d0c 170 void Position1y(double b)
Thijsjeee 1:fafea1d00d0c 171 {
Thijsjeee 1:fafea1d00d0c 172 if (b > 0.20) {
Thijsjeee 1:fafea1d00d0c 173 Cyy=y1;
Thijsjeee 1:fafea1d00d0c 174 if(dir == true) {
Thijsjeee 1:fafea1d00d0c 175 if(y1 < 43) {
Thijsjeee 1:fafea1d00d0c 176 y1 = y1+4;
Thijsjeee 1:fafea1d00d0c 177 //return y1;
Thijsjeee 1:fafea1d00d0c 178 } else if ( y1 >= 43) {
Thijsjeee 1:fafea1d00d0c 179 y1 = 11;
Thijsjeee 1:fafea1d00d0c 180 //return y1;
Thijsjeee 1:fafea1d00d0c 181 } else {
Thijsjeee 1:fafea1d00d0c 182 }
Thijsjeee 1:fafea1d00d0c 183 } else {
Thijsjeee 1:fafea1d00d0c 184 if(y1 > 11) {
Thijsjeee 1:fafea1d00d0c 185 y1 = y1-4;
Thijsjeee 1:fafea1d00d0c 186 //return y1;
Thijsjeee 1:fafea1d00d0c 187 } else if ( y1 <= 11) {
Thijsjeee 1:fafea1d00d0c 188 y1 = 43;
Thijsjeee 1:fafea1d00d0c 189 //return y1;
Thijsjeee 1:fafea1d00d0c 190 } else {
Thijsjeee 1:fafea1d00d0c 191 }
Thijsjeee 1:fafea1d00d0c 192 }
Thijsjeee 1:fafea1d00d0c 193
Thijsjeee 1:fafea1d00d0c 194 wait(0.5);
Thijsjeee 1:fafea1d00d0c 195 }
Thijsjeee 1:fafea1d00d0c 196 }
Thijsjeee 1:fafea1d00d0c 197 void change()
Thijsjeee 1:fafea1d00d0c 198 {
Thijsjeee 1:fafea1d00d0c 199 dir = !dir;
Thijsjeee 1:fafea1d00d0c 200 }
Thijsjeee 0:0af507ea0d83 201 void NR() //Newton Rapshon Calculation
Thijsjeee 0:0af507ea0d83 202 {
Thijsjeee 0:0af507ea0d83 203 //Variables
Thijsjeee 1:fafea1d00d0c 204 double Hoa = X[0][0];
Thijsjeee 1:fafea1d00d0c 205 double Hob = X[1][0];
Thijsjeee 1:fafea1d00d0c 206
Thijsjeee 1:fafea1d00d0c 207 double meuk1 = cos(Hoa) * A - ((E + C)/E) * (cos(Hob)*D - ex) - ex;
Thijsjeee 1:fafea1d00d0c 208 double meuk2 = sin(Hoa) * A - ((E + C)/E) * (sin(Hob)*D - ey) - ey;
Thijsjeee 1:fafea1d00d0c 209
Thijsjeee 0:0af507ea0d83 210 //Define f(x)
Thijsjeee 1:fafea1d00d0c 211 fval[0][0] = pow((ex - D * cos(Hob)),2) + pow((ey - D * sin(Hob)),2) - pow((E),2);
Thijsjeee 1:fafea1d00d0c 212 fval[1][0] = pow((meuk1),2) + pow((meuk2),2) - pow((B),2);
Thijsjeee 0:0af507ea0d83 213 //Jacobian
Thijsjeee 1:fafea1d00d0c 214
Thijsjeee 1:fafea1d00d0c 215
Thijsjeee 1:fafea1d00d0c 216
Thijsjeee 1:fafea1d00d0c 217 J[0][0]= 0;
Thijsjeee 1:fafea1d00d0c 218 J[0][1]= 2 * D * sin(Hob) * (ex - D * cos(Hob)) - 2 * D * cos(Hob) * (ey - D * sin(Hob));
Thijsjeee 1:fafea1d00d0c 219 J[1][0]= - 2 * A * sin(Hoa) * meuk1 + 2 * A * cos(Hoa)* meuk2;
Thijsjeee 1:fafea1d00d0c 220 J[1][1]= 2 * ((E + C)/E) * D * sin(Hob) * meuk1 - 2 * ((E + C)/E) * D * cos(Hob) * meuk2;
Thijsjeee 0:0af507ea0d83 221 }
Thijsjeee 0:0af507ea0d83 222
Thijsjeee 1:fafea1d00d0c 223 void angle_define() //define the angle needed.
Thijsjeee 1:fafea1d00d0c 224 {
Thijsjeee 1:fafea1d00d0c 225 for(int i=1 ; i <= MaxIter; i++) {
Thijsjeee 1:fafea1d00d0c 226 NR();
Thijsjeee 0:0af507ea0d83 227
Thijsjeee 1:fafea1d00d0c 228 X[0][0] = X[0][0] - ((-J[1][1]/(J[0][1] *J[1][0]))*fval[0][0] + (1/J[1][0])* fval[0][1]);
Thijsjeee 1:fafea1d00d0c 229 X[1][0] = X[1][0] - ((1/J[0][1])*fval[0][0]);
Thijsjeee 0:0af507ea0d83 230
Thijsjeee 0:0af507ea0d83 231 err[0][0] = abs(X[0][0] - Xold[0][0]);
Thijsjeee 0:0af507ea0d83 232 err[1][0] = abs(X[1][0] - Xold[1][0]);
Thijsjeee 0:0af507ea0d83 233
Thijsjeee 0:0af507ea0d83 234 Xold[0][0] = X[0][0];
Thijsjeee 0:0af507ea0d83 235 Xold[1][0] = X[1][0];
Thijsjeee 1:fafea1d00d0c 236
Thijsjeee 0:0af507ea0d83 237 counts_a = ((X[0][0]) / (2* pi)) * 8400;
Thijsjeee 1:fafea1d00d0c 238 counts_b = ((X[1][0]) / (2* pi)) * 8400;
Thijsjeee 1:fafea1d00d0c 239
Thijsjeee 1:fafea1d00d0c 240 if(err[0][0] <= tolX) {
Thijsjeee 1:fafea1d00d0c 241 if(err[1][0] <= tolX) {
Thijsjeee 0:0af507ea0d83 242 break;
Thijsjeee 0:0af507ea0d83 243 }
Thijsjeee 1:fafea1d00d0c 244 }
Thijsjeee 1:fafea1d00d0c 245 }
Thijsjeee 0:0af507ea0d83 246 }
Thijsjeee 0:0af507ea0d83 247
Thijsjeee 0:0af507ea0d83 248 void position_define()
Thijsjeee 0:0af507ea0d83 249 {
Thijsjeee 1:fafea1d00d0c 250 if (ex >= Cxx - 0.01 && ex <= Cxx + 0.01) {
Thijsjeee 1:fafea1d00d0c 251 if (ey >= Cyy - 0.01 && ey <= Cyy + 0.01) {
Thijsjeee 1:fafea1d00d0c 252 } else {
Thijsjeee 1:fafea1d00d0c 253 if (ey > Cyy) {
Thijsjeee 1:fafea1d00d0c 254 ey = ey - 0.004;
Thijsjeee 1:fafea1d00d0c 255 }
Thijsjeee 1:fafea1d00d0c 256 if (ey < Cyy) {
Thijsjeee 1:fafea1d00d0c 257 ey = ey + 0.004;
Thijsjeee 1:fafea1d00d0c 258 }
Thijsjeee 0:0af507ea0d83 259 }
Thijsjeee 1:fafea1d00d0c 260 } else {
Thijsjeee 1:fafea1d00d0c 261 if (ex > Cxx) {
Thijsjeee 1:fafea1d00d0c 262 ex = ex - 0.004;
Thijsjeee 1:fafea1d00d0c 263 }
Thijsjeee 1:fafea1d00d0c 264 if (ex < Cxx) {
Thijsjeee 1:fafea1d00d0c 265 ex = ex + 0.004;
Thijsjeee 0:0af507ea0d83 266 }
Thijsjeee 0:0af507ea0d83 267 }
Thijsjeee 0:0af507ea0d83 268 }
Thijsjeee 0:0af507ea0d83 269
Thijsjeee 1:fafea1d00d0c 270
Thijsjeee 1:fafea1d00d0c 271
Thijsjeee 1:fafea1d00d0c 272
Thijsjeee 1:fafea1d00d0c 273
Thijsjeee 1:fafea1d00d0c 274
Thijsjeee 1:fafea1d00d0c 275
Thijsjeee 1:fafea1d00d0c 276 void position_controll_void()
Thijsjeee 0:0af507ea0d83 277 {
Thijsjeee 1:fafea1d00d0c 278 bas = true;
Thijsjeee 0:0af507ea0d83 279 }
Thijsjeee 0:0af507ea0d83 280
Thijsjeee 1:fafea1d00d0c 281
Thijsjeee 0:0af507ea0d83 282 void motor_controler()
Thijsjeee 0:0af507ea0d83 283 {
Thijsjeee 1:fafea1d00d0c 284 bb = -(Enc1.getPulses()) - 201;
Thijsjeee 1:fafea1d00d0c 285 bc = Enc2.getPulses() + 2100;
Thijsjeee 0:0af507ea0d83 286
Thijsjeee 1:fafea1d00d0c 287 if (bb >= counts_a) {
Thijsjeee 1:fafea1d00d0c 288 z = PID_controller((counts_a - bb),Kp, Ki, Kd, Ts);
Thijsjeee 0:0af507ea0d83 289 PMW1.write(abs(z));
Thijsjeee 0:0af507ea0d83 290 M1 = 1;
Thijsjeee 0:0af507ea0d83 291 }
Thijsjeee 1:fafea1d00d0c 292 if (bb <= counts_a) {
Thijsjeee 1:fafea1d00d0c 293 z = PID_controller((counts_a - bb),Kp, Ki, Kd, Ts);
Thijsjeee 1:fafea1d00d0c 294 PMW1.write(abs(z));
Thijsjeee 1:fafea1d00d0c 295 M1 = 0;
Thijsjeee 1:fafea1d00d0c 296 }
Thijsjeee 1:fafea1d00d0c 297 if (bc >= counts_b) {
Thijsjeee 0:0af507ea0d83 298 M2 = 0;
Thijsjeee 1:fafea1d00d0c 299 z = PID_controller((counts_b - bc),Kp, Ki, Kd, Ts);
Thijsjeee 0:0af507ea0d83 300 PMW2.write(abs(z));
Thijsjeee 1:fafea1d00d0c 301 }
Thijsjeee 1:fafea1d00d0c 302 if (bc <= counts_b) {
Thijsjeee 0:0af507ea0d83 303 M2 = 1;
Thijsjeee 1:fafea1d00d0c 304 z = PID_controller((counts_b - bc),Kp, Ki, Kd, Ts);
Thijsjeee 0:0af507ea0d83 305 PMW2.write(abs(z));
Thijsjeee 1:fafea1d00d0c 306 }
Thijsjeee 0:0af507ea0d83 307 }
Thijsjeee 0:0af507ea0d83 308
Thijsjeee 2:f68fd7b1c655 309
Thijsjeee 2:f68fd7b1c655 310 void change_wait()
Thijsjeee 2:f68fd7b1c655 311 {
Thijsjeee 2:f68fd7b1c655 312 waiting = waiting++;
Thijsjeee 2:f68fd7b1c655 313 }
Thijsjeee 2:f68fd7b1c655 314
Thijsjeee 2:f68fd7b1c655 315
Thijsjeee 2:f68fd7b1c655 316 void initializeren()
Thijsjeee 2:f68fd7b1c655 317 {
Thijsjeee 2:f68fd7b1c655 318 waiting = 1;
Thijsjeee 4:f16a18aa58bd 319 while(waiting <=2)
Thijsjeee 2:f68fd7b1c655 320 if (bas == true)
Thijsjeee 2:f68fd7b1c655 321 {
Thijsjeee 2:f68fd7b1c655 322 if (waiting == 1) {
Thijsjeee 2:f68fd7b1c655 323 Cxx = -20;
Thijsjeee 2:f68fd7b1c655 324 Cyy = 10;
Thijsjeee 2:f68fd7b1c655 325
Thijsjeee 2:f68fd7b1c655 326 position_define();
Thijsjeee 2:f68fd7b1c655 327 angle_define();
Thijsjeee 2:f68fd7b1c655 328 motor_controler();
Thijsjeee 2:f68fd7b1c655 329
Thijsjeee 2:f68fd7b1c655 330 }
Thijsjeee 2:f68fd7b1c655 331
Thijsjeee 2:f68fd7b1c655 332 if(waiting == 2) {
Thijsjeee 4:f16a18aa58bd 333 Cxx = -45;
Thijsjeee 2:f68fd7b1c655 334 Cyy = 10;
Thijsjeee 2:f68fd7b1c655 335 position_define();
Thijsjeee 2:f68fd7b1c655 336 angle_define();
Thijsjeee 2:f68fd7b1c655 337 motor_controler();
Thijsjeee 2:f68fd7b1c655 338 button.fall(&change_wait);
Thijsjeee 2:f68fd7b1c655 339 }
Thijsjeee 2:f68fd7b1c655 340 }
Thijsjeee 2:f68fd7b1c655 341 }
Thijsjeee 2:f68fd7b1c655 342
Thijsjeee 2:f68fd7b1c655 343
Thijsjeee 0:0af507ea0d83 344 int main()
Thijsjeee 0:0af507ea0d83 345 {
Thijsjeee 3:40427c0157a0 346 Led = 1;
Thijsjeee 0:0af507ea0d83 347 PMW1.period_us(60);
Thijsjeee 2:f68fd7b1c655 348 button.fall(&change_wait);
Thijsjeee 2:f68fd7b1c655 349 position_controll.attach(position_controll_void,0.002);
Thijsjeee 0:0af507ea0d83 350 X[0][0] = X0[0][0];
Thijsjeee 0:0af507ea0d83 351 X[1][0] = X0[1][0];
Thijsjeee 0:0af507ea0d83 352 Xold[0][0] = X0[0][0];
Thijsjeee 0:0af507ea0d83 353 Xold[1][0] = X0[1][0];
Thijsjeee 2:f68fd7b1c655 354 //pc.baud(115200);
Thijsjeee 2:f68fd7b1c655 355 initializeren();
Thijsjeee 1:fafea1d00d0c 356 x1 = Cxx;
Thijsjeee 1:fafea1d00d0c 357 y1= Cyy;
Thijsjeee 1:fafea1d00d0c 358 bqc.add( &bq1 ).add( &bq2 );
Thijsjeee 1:fafea1d00d0c 359 bqc2.add( &bq3 );
Thijsjeee 1:fafea1d00d0c 360 bqc3.add( &bq4 ).add( &bq5 );
Thijsjeee 1:fafea1d00d0c 361 bqc4.add( &bq6 );
Thijsjeee 4:f16a18aa58bd 362 Cxx = -35;
Thijsjeee 4:f16a18aa58bd 363 Cyy = 27;
Thijsjeee 1:fafea1d00d0c 364 while(true) {
Thijsjeee 0:0af507ea0d83 365
Thijsjeee 1:fafea1d00d0c 366 if(bas == true) {
Thijsjeee 1:fafea1d00d0c 367 Led = 1;
Thijsjeee 1:fafea1d00d0c 368 filteren();
Thijsjeee 1:fafea1d00d0c 369 position_define();
Thijsjeee 1:fafea1d00d0c 370 angle_define();
Thijsjeee 1:fafea1d00d0c 371 motor_controler();
Thijsjeee 5:d3031d082c22 372
Thijsjeee 5:d3031d082c22 373
Thijsjeee 5:d3031d082c22 374 scope.set(1, emgFiltered3); // filtered 1
Thijsjeee 5:d3031d082c22 375 scope.set(2, emgFiltered23); //filtered signal 2
Thijsjeee 5:d3031d082c22 376 scope.send();
Thijsjeee 2:f68fd7b1c655 377
Thijsjeee 4:f16a18aa58bd 378 //sw2.fall(change);
Thijsjeee 4:f16a18aa58bd 379 //Position1x(emgFiltered3);
Thijsjeee 4:f16a18aa58bd 380 //Position1y(emgFiltered23);
Thijsjeee 1:fafea1d00d0c 381 Led = 0;
Thijsjeee 1:fafea1d00d0c 382 bas= false;
Thijsjeee 1:fafea1d00d0c 383 }
Thijsjeee 0:0af507ea0d83 384 }
Thijsjeee 1:fafea1d00d0c 385
Thijsjeee 0:0af507ea0d83 386 }