Werkt nu met lagere Fs, nog wel thresholds aanpassen en outputs controleren.

Dependencies:   MODSERIAL mbed

Fork of EMG2spier by Jorick Leferink

Committer:
DanAuhust
Date:
Wed Oct 30 15:05:06 2013 +0000
Revision:
5:6fd237516c27
Parent:
4:41222da4a577
asddf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DanAuhust 0:3a1196d78030 1 #include "mbed.h"
DanAuhust 0:3a1196d78030 2 #include "MODSERIAL.h"
DanAuhust 2:5c6873981eac 3 // test //
DanAuhust 0:3a1196d78030 4 //Define objects
DanAuhust 0:3a1196d78030 5 AnalogIn emg_biceps(PTB0); //Analog input
DanAuhust 0:3a1196d78030 6 AnalogIn emg_triceps(PTB1);
jorick92 3:b299102c7d19 7 AnalogIn emg_flexoren(PTB2);
jorick92 3:b299102c7d19 8 AnalogIn emg_extensoren(PTB3);
DanAuhust 0:3a1196d78030 9 PwmOut red(LED_RED); // sig_out biceps
DanAuhust 0:3a1196d78030 10 PwmOut blue(LED_BLUE); // sig_out triceps
DanAuhust 0:3a1196d78030 11 // PwmOut green(LED_GREEN);
DanAuhust 0:3a1196d78030 12
DanAuhust 0:3a1196d78030 13 Ticker timer;
DanAuhust 0:3a1196d78030 14 MODSERIAL pc(USBTX,USBRX,64,1024);
DanAuhust 0:3a1196d78030 15
DanAuhust 0:3a1196d78030 16 #define MAXCOUNT 40
DanAuhust 0:3a1196d78030 17 #define inertia 4
DanAuhust 0:3a1196d78030 18
DanAuhust 0:3a1196d78030 19 #define gain_biceps 1
DanAuhust 5:6fd237516c27 20 #define threshold_biceps 0.06
DanAuhust 0:3a1196d78030 21 #define border_biceps 0.1125 //25% van .57 - .12
DanAuhust 5:6fd237516c27 22 #define cap_biceps 2
DanAuhust 0:3a1196d78030 23
DanAuhust 0:3a1196d78030 24 #define gain_triceps 1
DanAuhust 5:6fd237516c27 25 #define threshold_triceps 0.06
DanAuhust 0:3a1196d78030 26 #define border_triceps 0.1237 //25% van .605 - .11 = .12375
DanAuhust 5:6fd237516c27 27 #define cap_triceps 2
DanAuhust 5:6fd237516c27 28 // constanten butterworth in aantekeningen EMG op dropbox
DanAuhust 0:3a1196d78030 29 #define NUM0 0.8841 // constante
DanAuhust 0:3a1196d78030 30 #define NUM1 -3.53647 // z^-1
DanAuhust 0:3a1196d78030 31 #define NUM2 5.3046 // z^-2etc.
DanAuhust 0:3a1196d78030 32 #define NUM3 -3.5364
DanAuhust 0:3a1196d78030 33 #define NUM4 0.8841
DanAuhust 0:3a1196d78030 34
DanAuhust 0:3a1196d78030 35 #define DEN0 1 // constante
DanAuhust 0:3a1196d78030 36 #define DEN1 -3.7538
DanAuhust 0:3a1196d78030 37 #define DEN2 5.2912
DanAuhust 0:3a1196d78030 38 #define DEN3 -3.3189
DanAuhust 0:3a1196d78030 39 #define DEN4 0.7816
DanAuhust 0:3a1196d78030 40
DanAuhust 0:3a1196d78030 41 //filter functie definieren. filter(signal_number)
DanAuhust 0:3a1196d78030 42 //signal_number=1 --> biceps filteren
DanAuhust 0:3a1196d78030 43 //signal_number=2 --> triceps filteren
DanAuhust 0:3a1196d78030 44 //signal_number=3 --> flexoren filteren
DanAuhust 0:3a1196d78030 45 //signal_number=4 --> extensoren filteren
DanAuhust 0:3a1196d78030 46
DanAuhust 5:6fd237516c27 47 float filter(int signal_number)
DanAuhust 5:6fd237516c27 48 {
DanAuhust 0:3a1196d78030 49 //static variables keep their values between function calls
DanAuhust 0:3a1196d78030 50 //the assignents are only executed the first iteration.
DanAuhust 0:3a1196d78030 51
DanAuhust 0:3a1196d78030 52 //variabelen biceps definieren
DanAuhust 1:fb33955ca402 53 float in0_biceps =0;
DanAuhust 1:fb33955ca402 54 static float in1_biceps =0, in2_biceps = 0, in3_biceps = 0, in4_biceps = 0;
DanAuhust 0:3a1196d78030 55 static float out0_biceps = 0, out1_biceps = 0 , out2_biceps = 0, out3_biceps = 0, out4_biceps = 0;
DanAuhust 0:3a1196d78030 56
DanAuhust 0:3a1196d78030 57 // variabelen triceps definieren
DanAuhust 0:3a1196d78030 58 static float in0_triceps = 0, in1_triceps = 0, in2_triceps = 0, in3_triceps = 0, in4_triceps = 0;
DanAuhust 0:3a1196d78030 59 static float out0_triceps = 0, out1_triceps = 0, out2_triceps = 0, out3_triceps = 0, out4_triceps = 0;
DanAuhust 0:3a1196d78030 60
DanAuhust 0:3a1196d78030 61 //variabelen flexoren definieren
DanAuhust 0:3a1196d78030 62 static float in0_flexoren = 0, in1_flexoren = 0, in2_flexoren = 0, in3_flexoren = 0, in4_flexoren = 0;
DanAuhust 0:3a1196d78030 63 static float out0_flexoren = 0, out1_flexoren = 0, out2_flexoren = 0, out3_flexoren = 0, out4_flexoren = 0;
DanAuhust 0:3a1196d78030 64
DanAuhust 0:3a1196d78030 65 //variablen extensoren definieren
DanAuhust 0:3a1196d78030 66 static float in0_extensoren = 0, in1_extensoren = 0, in2_extensoren = 0, in3_extensoren = 0, in4_extensoren = 0;
DanAuhust 0:3a1196d78030 67 static float out0_extensoren = 0, out1_extensoren = 0, out2_extensoren = 0, out3_extensoren = 0, out4_extensoren = 0;
DanAuhust 0:3a1196d78030 68
DanAuhust 0:3a1196d78030 69 //overige variabelen definieren
DanAuhust 0:3a1196d78030 70 // verwijder static waar mogelijk, maakt programma iets sneller
DanAuhust 0:3a1196d78030 71 static float count_biceps = 0, count_triceps = 0, count_extensoren = 0, count_flexoren = 0;
DanAuhust 0:3a1196d78030 72 static float square_biceps = 0, square_triceps = 0, square_flexoren = 0, square_extensoren = 0;
DanAuhust 0:3a1196d78030 73 static float sum_biceps = 0, sum_triceps = 0, sum_flexoren = 0, sum_extensoren = 0;
DanAuhust 0:3a1196d78030 74 static float mean_biceps = 0.1, mean_triceps = 0.1, mean_flexoren = 0.1, mean_extensoren = 0.1;
DanAuhust 5:6fd237516c27 75 //static float emg_biceps, emg_triceps, emg_flexoren, emg_extensoren; // output ruwe EMG
DanAuhust 0:3a1196d78030 76 static float sig_in_biceps, sig_in_triceps, sig_in_extensoren, sig_in_flexoren; // naam gewijzigd, output StDev
DanAuhust 0:3a1196d78030 77 static float sig_out_biceps, sig_out_triceps, sig_out_extensoren, sig_out_flexoren;
DanAuhust 5:6fd237516c27 78 float sig_out, deltaV;
DanAuhust 1:fb33955ca402 79 static float sig_prev_biceps = 0, sig_prev_triceps = 0, sig_prev_extensoren = 0, sig_prev_flexoren = 0;
DanAuhust 1:fb33955ca402 80 static int stat0_biceps, stat0_triceps, stat0_extensoren, stat0_flexoren;
DanAuhust 1:fb33955ca402 81 static int stat1_biceps = 0, stat1_triceps = 0, stat1_extensoren = 0, stat1_flexoren = 0;
DanAuhust 0:3a1196d78030 82
DanAuhust 5:6fd237516c27 83 switch (signal_number)
DanAuhust 5:6fd237516c27 84 {
DanAuhust 0:3a1196d78030 85 case 1:
DanAuhust 0:3a1196d78030 86 //biceps filteren
DanAuhust 0:3a1196d78030 87 in4_biceps = in3_biceps; in3_biceps = in2_biceps; in2_biceps = in1_biceps; in1_biceps = in0_biceps;
DanAuhust 0:3a1196d78030 88 in0_biceps = emg_biceps.read();
DanAuhust 1:fb33955ca402 89 out4_biceps = out3_biceps; out3_biceps = out2_biceps; out2_biceps = out1_biceps; out1_biceps = out0_biceps;
DanAuhust 0:3a1196d78030 90 out0_biceps = (NUM0*in0_biceps + NUM1*in1_biceps + NUM2*in2_biceps + NUM3*in3_biceps + NUM4*in4_biceps - DEN1*out1_biceps - DEN2*out2_biceps - DEN3*out3_biceps - DEN4*out4_biceps ) / DEN0;
DanAuhust 0:3a1196d78030 91
DanAuhust 0:3a1196d78030 92 //std deviatie bepalen, om de N metingen
DanAuhust 0:3a1196d78030 93 sum_biceps += out0_biceps;
DanAuhust 5:6fd237516c27 94 square_biceps += (out0_biceps - mean_biceps)*(out0_biceps - mean_biceps); //neem absolute waarde, kwadrateer, voeg toe aan vorige square
DanAuhust 0:3a1196d78030 95 // voeg rest EMG's toe, variabelen alleen _spier geven als het nodig is.
DanAuhust 0:3a1196d78030 96 count_biceps += 1; // hou bij hoeveel squares er zijn opgeteld
DanAuhust 0:3a1196d78030 97 if (count_biceps >= MAXCOUNT)
DanAuhust 0:3a1196d78030 98 { sig_in_biceps = sqrt(square_biceps/count_biceps);
DanAuhust 0:3a1196d78030 99 mean_biceps = sum_biceps/count_biceps;
DanAuhust 0:3a1196d78030 100 count_biceps = 0; square_biceps = 0; sum_biceps = 0; // en neem de RMS als er genoeg zijn geteld, stuur die door, en reset sqaure en count
DanAuhust 5:6fd237516c27 101
DanAuhust 1:fb33955ca402 102 deltaV = sig_in_biceps - sig_prev_biceps;
DanAuhust 0:3a1196d78030 103 if (sig_in_biceps <= threshold_biceps) // threshold
DanAuhust 0:3a1196d78030 104 { stat0_biceps = 0;
DanAuhust 0:3a1196d78030 105 if (stat1_biceps == 1)
DanAuhust 0:3a1196d78030 106 sig_out_biceps = sig_prev_biceps + deltaV / inertia;
DanAuhust 0:3a1196d78030 107 else sig_out_biceps = 0;
DanAuhust 0:3a1196d78030 108 }
DanAuhust 5:6fd237516c27 109 else if (sig_in_biceps >= cap_biceps) // cap
DanAuhust 5:6fd237516c27 110 { stat0_biceps = 0;
DanAuhust 5:6fd237516c27 111 sig_out_biceps = cap_biceps;
DanAuhust 5:6fd237516c27 112 }
DanAuhust 0:3a1196d78030 113 else if ( deltaV >= border_biceps ) // stijging
DanAuhust 0:3a1196d78030 114 { stat0_biceps = 1;
DanAuhust 0:3a1196d78030 115 if (stat1_biceps == -1)
DanAuhust 0:3a1196d78030 116 sig_out_biceps = sig_prev_biceps + deltaV / inertia;
DanAuhust 0:3a1196d78030 117 else sig_out_biceps = sig_in_biceps;
DanAuhust 0:3a1196d78030 118 }
DanAuhust 0:3a1196d78030 119 else if ( deltaV <= -border_biceps ) // daling
DanAuhust 0:3a1196d78030 120 { stat0_biceps = -1;
DanAuhust 0:3a1196d78030 121 if (stat1_biceps == 1)
DanAuhust 0:3a1196d78030 122 sig_out_biceps = sig_prev_biceps + deltaV / inertia;
DanAuhust 0:3a1196d78030 123 else sig_out_biceps = sig_in_biceps;
DanAuhust 0:3a1196d78030 124 }
DanAuhust 0:3a1196d78030 125 else { stat0_biceps = 0;
DanAuhust 0:3a1196d78030 126 sig_out_biceps = sig_in_biceps;
DanAuhust 0:3a1196d78030 127 }
DanAuhust 5:6fd237516c27 128 sig_prev_biceps = sig_out_biceps;
DanAuhust 0:3a1196d78030 129 stat1_biceps = stat0_biceps;
DanAuhust 0:3a1196d78030 130 sig_out = sig_out_biceps;
DanAuhust 0:3a1196d78030 131 }
DanAuhust 0:3a1196d78030 132 else sig_out = -1;
DanAuhust 0:3a1196d78030 133 break;
DanAuhust 0:3a1196d78030 134 case 2:
DanAuhust 0:3a1196d78030 135 //triceps filteren
DanAuhust 0:3a1196d78030 136 in4_triceps = in3_triceps; in3_triceps = in2_triceps; in2_triceps = in1_triceps; in1_triceps = in0_triceps;
DanAuhust 0:3a1196d78030 137 in0_triceps = emg_triceps.read();
DanAuhust 0:3a1196d78030 138 out4_triceps = out3_triceps; out3_triceps = out2_triceps; out2_triceps = out1_triceps; out1_triceps = out0_triceps;
DanAuhust 5:6fd237516c27 139 out0_triceps = (NUM0*in0_triceps + NUM1*in1_triceps + NUM2*in2_triceps + NUM3*in3_triceps + NUM4*in4_triceps - DEN1*out1_triceps - DEN2*out2_triceps - DEN3*out3_triceps - DEN4*out4_triceps ) / DEN0;
DanAuhust 0:3a1196d78030 140 //std deviatie bepalen om de N metingen
DanAuhust 0:3a1196d78030 141 sum_triceps += out0_triceps;
DanAuhust 5:6fd237516c27 142 square_triceps += (out0_triceps - mean_triceps)*(out0_triceps - mean_triceps); //neem absolute waarde, kwadrateer, voeg toe aan vorige square
DanAuhust 0:3a1196d78030 143 // voeg rest EMG's toe, variabelen alleen _spier geven als het nodig is.
DanAuhust 0:3a1196d78030 144 count_triceps += 1; // hou bij hoeveel squares er zijn opgeteld
DanAuhust 0:3a1196d78030 145 if (count_triceps >= MAXCOUNT)
DanAuhust 0:3a1196d78030 146 { sig_in_triceps = sqrt(square_triceps/count_triceps);
DanAuhust 0:3a1196d78030 147 mean_triceps = sum_triceps/count_triceps;
DanAuhust 0:3a1196d78030 148 count_triceps = 0; square_triceps = 0; sum_triceps = 0;// en neem de RMS als er genoeg zijn geteld, stuur die door, en reset sqaure en count
DanAuhust 1:fb33955ca402 149 deltaV = sig_in_triceps - sig_prev_triceps;
DanAuhust 5:6fd237516c27 150 if(pc.txBufferGetSize(0)-pc.txBufferGetCount() > 30) // in sommige versies staat rx, dit klopt niet
DanAuhust 5:6fd237516c27 151 pc.printf("%.6f\n",sig_in_triceps);
DanAuhust 0:3a1196d78030 152 if (sig_in_triceps <= threshold_triceps) // threshold
DanAuhust 0:3a1196d78030 153 { stat0_triceps = 0;
DanAuhust 0:3a1196d78030 154 if (stat1_triceps == 1)
DanAuhust 0:3a1196d78030 155 sig_out_triceps = sig_prev_triceps + deltaV / inertia;
DanAuhust 0:3a1196d78030 156 else sig_out_triceps = 0;
DanAuhust 0:3a1196d78030 157 }
DanAuhust 5:6fd237516c27 158 else if (sig_in_triceps >= cap_triceps) // cap
DanAuhust 5:6fd237516c27 159 { stat0_triceps = 0;
DanAuhust 5:6fd237516c27 160 sig_out_triceps = cap_triceps;
DanAuhust 5:6fd237516c27 161 }
DanAuhust 0:3a1196d78030 162 else if ( deltaV >= border_triceps ) // stijging
DanAuhust 0:3a1196d78030 163 { stat0_triceps = 1;
DanAuhust 0:3a1196d78030 164 if (stat1_triceps == -1)
DanAuhust 5:6fd237516c27 165 sig_out_triceps = sig_prev_triceps + deltaV / inertia;
DanAuhust 0:3a1196d78030 166 else sig_out_triceps = sig_in_triceps;
DanAuhust 0:3a1196d78030 167 }
DanAuhust 0:3a1196d78030 168 else if ( deltaV <= -border_triceps ) // daling
DanAuhust 0:3a1196d78030 169 { stat0_triceps = -1;
DanAuhust 0:3a1196d78030 170 if (stat1_triceps == 1)
DanAuhust 0:3a1196d78030 171 sig_out_triceps = sig_prev_triceps + deltaV / inertia;
DanAuhust 0:3a1196d78030 172 else sig_out_triceps = sig_in_triceps;
DanAuhust 0:3a1196d78030 173 }
DanAuhust 0:3a1196d78030 174 else { stat0_triceps = 0;
DanAuhust 0:3a1196d78030 175 sig_out_triceps = sig_in_triceps;
DanAuhust 0:3a1196d78030 176 }
DanAuhust 5:6fd237516c27 177 sig_prev_triceps = sig_out_triceps;
DanAuhust 0:3a1196d78030 178 stat1_triceps = stat0_triceps;
DanAuhust 0:3a1196d78030 179 sig_out = sig_out_triceps;
DanAuhust 0:3a1196d78030 180 }
DanAuhust 0:3a1196d78030 181 else sig_out = -1;
DanAuhust 0:3a1196d78030 182 break;
DanAuhust 0:3a1196d78030 183 case 3:
DanAuhust 0:3a1196d78030 184 //flexoren filteren
DanAuhust 0:3a1196d78030 185 in4_flexoren = in3_flexoren; in3_flexoren = in2_flexoren; in2_flexoren = in1_flexoren; in1_flexoren = in0_flexoren;
DanAuhust 0:3a1196d78030 186 in0_flexoren = emg_flexoren.read();
DanAuhust 0:3a1196d78030 187 out4_flexoren = out3_flexoren; out3_flexoren = out2_flexoren; out2_flexoren = out1_flexoren; out1_flexoren = out0_flexoren;
DanAuhust 0:3a1196d78030 188 out0_flexoren = (NUM0*in0_flexoren + NUM1*in1_flexoren + NUM2*in2_flexoren + NUM3*in3_flexoren + NUM4*in4_flexoren - DEN1*out1_flexoren - DEN2*out2_flexoren - DEN3*out3_flexoren - DEN4*out4_flexoren) / DEN0;
DanAuhust 0:3a1196d78030 189
DanAuhust 0:3a1196d78030 190 //std deviatie bepalen om de N metingen
DanAuhust 0:3a1196d78030 191 sum_flexoren += out0_flexoren;
DanAuhust 5:6fd237516c27 192 square_flexoren += (out0_flexoren - mean_flexoren)*(out0_flexoren - mean_flexoren); //neem absolute waarde, kwadrateer, voeg toe aan vorige square
DanAuhust 0:3a1196d78030 193 // voeg rest EMG's toe, variabelen alleen _spier geven als het nodig is.
DanAuhust 0:3a1196d78030 194 count_flexoren += 1; // hou bij hoeveel squares er zijn opgeteld
DanAuhust 0:3a1196d78030 195 if (count_flexoren >= MAXCOUNT)
DanAuhust 0:3a1196d78030 196 { sig_in_flexoren = sqrt(square_flexoren/count_flexoren);
DanAuhust 0:3a1196d78030 197 mean_flexoren = sum_flexoren/count_flexoren;
DanAuhust 0:3a1196d78030 198 count_flexoren = 0; square_flexoren = 0; sum_flexoren = 0; // en neem de RMS als er genoeg zijn geteld, stuur die door, en reset sqaure en count
DanAuhust 0:3a1196d78030 199
DanAuhust 0:3a1196d78030 200 sig_out = sig_out_flexoren;
DanAuhust 0:3a1196d78030 201 }
DanAuhust 0:3a1196d78030 202 else sig_out = -1;
DanAuhust 0:3a1196d78030 203 break;
DanAuhust 0:3a1196d78030 204 case 4:
DanAuhust 0:3a1196d78030 205 //extensoren filteren
DanAuhust 0:3a1196d78030 206 in4_extensoren = in3_extensoren; in3_extensoren = in2_extensoren; in2_extensoren = in1_extensoren; in1_extensoren = in0_extensoren;
DanAuhust 0:3a1196d78030 207 in0_extensoren = emg_extensoren.read();
DanAuhust 0:3a1196d78030 208 out4_extensoren = out3_extensoren; out3_extensoren = out2_extensoren; out2_extensoren = out1_extensoren; out1_extensoren = out0_extensoren;
DanAuhust 0:3a1196d78030 209 out0_extensoren = (NUM0*in0_extensoren + NUM1*in1_extensoren + NUM2*in2_extensoren + NUM3*in3_extensoren + NUM4*in4_extensoren - DEN1*out1_extensoren - DEN2*out2_extensoren - DEN3*out3_extensoren - DEN4*out4_extensoren) / DEN0;
DanAuhust 0:3a1196d78030 210
DanAuhust 0:3a1196d78030 211 //std deviatie bepalen om de 50 metingen
DanAuhust 0:3a1196d78030 212 sum_extensoren += out0_extensoren;
DanAuhust 5:6fd237516c27 213 square_extensoren += (out0_extensoren - mean_extensoren)*(out0_extensoren - mean_extensoren); //neem absolute waarde, kwadrateer, voeg toe aan vorige square
DanAuhust 0:3a1196d78030 214 // voeg rest EMG's toe, variabelen alleen _spier geven als het nodig is.
DanAuhust 0:3a1196d78030 215 count_extensoren += 1; // hou bij hoeveel squares er zijn opgeteld
DanAuhust 0:3a1196d78030 216 if (count_extensoren >= MAXCOUNT)
DanAuhust 0:3a1196d78030 217 { sig_in_extensoren = sqrt(square_extensoren/count_extensoren);
DanAuhust 0:3a1196d78030 218 mean_extensoren = sum_extensoren/count_extensoren;
DanAuhust 0:3a1196d78030 219 count_extensoren = 0; square_extensoren = 0; sum_extensoren = 0; // en neem de RMS als er genoeg zijn geteld, stuur die door, en reset sqaure en count
DanAuhust 0:3a1196d78030 220
DanAuhust 0:3a1196d78030 221 sig_out=sig_out_extensoren;
DanAuhust 0:3a1196d78030 222 }
DanAuhust 0:3a1196d78030 223 else sig_out = -1;
DanAuhust 0:3a1196d78030 224 break;
DanAuhust 0:3a1196d78030 225 }
DanAuhust 0:3a1196d78030 226
DanAuhust 0:3a1196d78030 227 return sig_out;
DanAuhust 0:3a1196d78030 228
DanAuhust 0:3a1196d78030 229 }
DanAuhust 0:3a1196d78030 230
DanAuhust 0:3a1196d78030 231 void looper()
DanAuhust 0:3a1196d78030 232 {
jorick92 3:b299102c7d19 233 static float biceps, triceps, extensoren, flexoren, emg_filter_test, dy, dx;
DanAuhust 0:3a1196d78030 234
DanAuhust 0:3a1196d78030 235 emg_filter_test = filter(1);
DanAuhust 5:6fd237516c27 236 if (emg_filter_test != -1)
DanAuhust 5:6fd237516c27 237 {biceps = emg_filter_test;
DanAuhust 5:6fd237516c27 238 }
DanAuhust 0:3a1196d78030 239 emg_filter_test = filter(2);
DanAuhust 5:6fd237516c27 240 if (emg_filter_test != -1)
DanAuhust 5:6fd237516c27 241 {triceps = emg_filter_test;
DanAuhust 5:6fd237516c27 242 }
DanAuhust 5:6fd237516c27 243
DanAuhust 5:6fd237516c27 244 dx = biceps - triceps;
DanAuhust 5:6fd237516c27 245
DanAuhust 5:6fd237516c27 246 if (biceps > triceps)
DanAuhust 5:6fd237516c27 247 {//dx = biceps;
DanAuhust 5:6fd237516c27 248 red = biceps; blue = 0;
DanAuhust 5:6fd237516c27 249 }
DanAuhust 5:6fd237516c27 250 else if (biceps < triceps)
DanAuhust 5:6fd237516c27 251 {//dx = -triceps;
DanAuhust 5:6fd237516c27 252 blue = gain_triceps*triceps; red = 0;
DanAuhust 5:6fd237516c27 253 }
DanAuhust 5:6fd237516c27 254 else {
DanAuhust 5:6fd237516c27 255 dx = 0; red = 0; blue = 0;
DanAuhust 5:6fd237516c27 256 }
DanAuhust 5:6fd237516c27 257 /*if(pc.txBufferGetSize(0)-pc.txBufferGetCount() > 30) // in sommige versies staat rx, dit klopt niet
DanAuhust 5:6fd237516c27 258 pc.printf("%.6f\n",biceps); */
DanAuhust 5:6fd237516c27 259
DanAuhust 0:3a1196d78030 260 /*emg_filter_test = filter(3);
DanAuhust 0:3a1196d78030 261 if (emg_filter_test != -1) flexoren = emg_filter_test;
DanAuhust 0:3a1196d78030 262 emg_filter_test = filter(4);
DanAuhust 0:3a1196d78030 263 if (emg_filter_test != -1) extensoren = emg_filter_test;
DanAuhust 0:3a1196d78030 264 */
DanAuhust 0:3a1196d78030 265 }
DanAuhust 0:3a1196d78030 266
DanAuhust 0:3a1196d78030 267 int main()
DanAuhust 0:3a1196d78030 268 {
DanAuhust 0:3a1196d78030 269 /*setup baudrate. Choose the same in your program on PC side*/
DanAuhust 0:3a1196d78030 270 pc.baud(115200);
DanAuhust 0:3a1196d78030 271 /*set the period for the PWM to the red LED*/
DanAuhust 5:6fd237516c27 272 red.period_ms(MAXCOUNT*2); // periode pwm = 2*Fs , blijkbaar.
DanAuhust 5:6fd237516c27 273 blue.period_ms(MAXCOUNT*2);
DanAuhust 0:3a1196d78030 274
DanAuhust 0:3a1196d78030 275
DanAuhust 0:3a1196d78030 276 /**Here you attach the 'void looper(void)' function to the Ticker object0
DanAuhust 0:3a1196d78030 277 * The looper() function will be called every 0.001 seconds.
DanAuhust 0:3a1196d78030 278 * Please mind that the parentheses after looper are omitted when using attach.
DanAuhust 0:3a1196d78030 279 */
DanAuhust 5:6fd237516c27 280 timer.attach(looper, 0.001); // programma zou sneller lopen als niet alle 4 de vensters tegelijk aflopen. Hiervoor moeten meer timers gebruikt worden.
DanAuhust 0:3a1196d78030 281 while(1) // Loop
DanAuhust 0:3a1196d78030 282 {
DanAuhust 1:fb33955ca402 283 // zie 'encoder' , timer bepaalt wanneer een if in de while-loop berekeningen doet voor de motor.
DanAuhust 5:6fd237516c27 284 // loop is leeg voor enkel meten EMG
DanAuhust 0:3a1196d78030 285 }
DanAuhust 5:6fd237516c27 286 }