Marieke M / Mbed 2 deprecated frdm_calibratie_maximum

Dependencies:   mbed HIDScope biquadFilter

Committer:
Marieke
Date:
Fri Oct 21 10:15:43 2016 +0000
Revision:
1:278677bb6b99
Parent:
0:4d69864f1002
Child:
2:27081b83a58e
calibratie script: op moment alles in main loop, moet uiteindelijk weer in if-loop. Oproepen van void "sample()" werkt niet zoals gewenst.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Marieke 0:4d69864f1002 1 #include "mbed.h"
Marieke 0:4d69864f1002 2 #include <stdio.h>
Marieke 0:4d69864f1002 3 #define SERIAL_BAUD 115200
Marieke 0:4d69864f1002 4
Marieke 0:4d69864f1002 5 AnalogIn emg0( A0 );
Marieke 0:4d69864f1002 6 AnalogIn emg1( A1 );
Marieke 0:4d69864f1002 7 Serial pc(USBTX,USBRX);
Marieke 0:4d69864f1002 8
Marieke 0:4d69864f1002 9 //HIDScope scope( 6 );
Marieke 0:4d69864f1002 10
Marieke 0:4d69864f1002 11
Marieke 0:4d69864f1002 12 /*int main() {
Marieke 0:4d69864f1002 13 pc.baud(115200);
Marieke 0:4d69864f1002 14 int array[10], maximum, size, c, location = 1;
Marieke 0:4d69864f1002 15
Marieke 0:4d69864f1002 16 for (int i=0;i<10;i++)
Marieke 0:4d69864f1002 17 {
Marieke 0:4d69864f1002 18 double EMGright = emg0.read();
Marieke 0:4d69864f1002 19 EMGright = array[i];
Marieke 0:4d69864f1002 20 }
Marieke 0:4d69864f1002 21
Marieke 0:4d69864f1002 22 printf("Enter the number of elements in array\n");
Marieke 0:4d69864f1002 23 scanf("%d", &size);
Marieke 0:4d69864f1002 24
Marieke 0:4d69864f1002 25 printf("Enter %d integers\n", size);
Marieke 0:4d69864f1002 26
Marieke 0:4d69864f1002 27 for (c = 0; c < size; c++)
Marieke 0:4d69864f1002 28 scanf("%d", &array[c]);
Marieke 0:4d69864f1002 29
Marieke 0:4d69864f1002 30 maximum = array[0];
Marieke 0:4d69864f1002 31
Marieke 0:4d69864f1002 32 for (c = 1; c < size; c++)
Marieke 0:4d69864f1002 33 {
Marieke 0:4d69864f1002 34 if (array[c] > maximum)
Marieke 0:4d69864f1002 35 {
Marieke 0:4d69864f1002 36 maximum = array[c];
Marieke 0:4d69864f1002 37 location = c+1;
Marieke 0:4d69864f1002 38 }
Marieke 0:4d69864f1002 39 }
Marieke 0:4d69864f1002 40
Marieke 0:4d69864f1002 41 printf("Maximum element is present at location %d and it's value is %d.\n", location, maximum);
Marieke 0:4d69864f1002 42 return 0;
Marieke 0:4d69864f1002 43 }*/
Marieke 0:4d69864f1002 44 /*
Marieke 0:4d69864f1002 45 #include "mbed.h"
Marieke 0:4d69864f1002 46 #include "HIDScope.h"
Marieke 0:4d69864f1002 47 #include "BiQuad.h"
Marieke 0:4d69864f1002 48 #include <stdio.h>
Marieke 0:4d69864f1002 49
Marieke 0:4d69864f1002 50 //Define objects
Marieke 0:4d69864f1002 51 AnalogIn emg0( A0 );
Marieke 0:4d69864f1002 52 AnalogIn emg1( A1 );*/
Marieke 0:4d69864f1002 53
Marieke 0:4d69864f1002 54 Ticker sample_timer, average_timer, filter_timer, t;
Marieke 0:4d69864f1002 55 //HIDScope scope( 6 );
Marieke 0:4d69864f1002 56 DigitalOut led1(LED_RED);
Marieke 0:4d69864f1002 57 DigitalOut led2(LED_BLUE);
Marieke 0:4d69864f1002 58
Marieke 0:4d69864f1002 59 volatile int time_passed = 0;
Marieke 0:4d69864f1002 60 volatile bool filter_timer_go=false;
Marieke 1:278677bb6b99 61
Marieke 1:278677bb6b99 62 double EMGright;
Marieke 1:278677bb6b99 63 double EMGleft;
Marieke 0:4d69864f1002 64 //average_timer_go=false,
Marieke 0:4d69864f1002 65 // Activates go-flags
Marieke 0:4d69864f1002 66 //void average_timer_act(){average_timer_go=true;};
Marieke 0:4d69864f1002 67 /*void filter_timer_act(){filter_timer_go=true;};
Marieke 0:4d69864f1002 68
Marieke 1:278677bb6b99 69
Marieke 1:278677bb6b99 70
Marieke 0:4d69864f1002 71 BiQuadChain bcq;
Marieke 0:4d69864f1002 72 // Notch filter wo=50; bw=wo/35
Marieke 0:4d69864f1002 73 BiQuad bq1(9.7805e-01,-1.1978e-16,9.7805e-01,1.0000e+00,-1.1978e-16,9.5610e-01);
Marieke 0:4d69864f1002 74 // High pass Butterworth filter 2nd order, Fc=10;
Marieke 0:4d69864f1002 75 BiQuad bq2(9.8239e-01,-1.9648e+00,9.8239e-01,1.0000e+00,-1.9645e+00,9.6508e-01);
Marieke 0:4d69864f1002 76 // Low pass Butterworth filter 2nd order, Fc = 8;
Marieke 0:4d69864f1002 77 BiQuad bq3(5.6248e-05,1.1250e-04,5.6248e-05,1.0000e+00,-1.9787e+00,9.7890e-01);
Marieke 0:4d69864f1002 78 // Low pass Butterworth filter 4th order, Fc = 450; plited up in 2x2nd order
Marieke 0:4d69864f1002 79 BiQuad bq4(1.0000e+00,2.0000e+00,1.0000e+00,1.0000e+00,-4.6382e-01,8.9354e-02);
Marieke 0:4d69864f1002 80 BiQuad bq5(1.0000e+00,2.0000e+00,1.0000e+00,1.0000e+00,-6.3254e-01,4.8559e-01);*/
Marieke 0:4d69864f1002 81
Marieke 0:4d69864f1002 82 void KeepTrackOfTime()
Marieke 0:4d69864f1002 83 {
Marieke 0:4d69864f1002 84 time_passed++;
Marieke 0:4d69864f1002 85 }
Marieke 0:4d69864f1002 86
Marieke 1:278677bb6b99 87 void sample()
Marieke 0:4d69864f1002 88 {
Marieke 1:278677bb6b99 89 double EMGright = emg0;
Marieke 1:278677bb6b99 90 double EMGleft = emg1;
Marieke 1:278677bb6b99 91 /*.set(0, emg0.read() );
Marieke 0:4d69864f1002 92 scope.set(1, emg1.read() );
Marieke 0:4d69864f1002 93
Marieke 0:4d69864f1002 94 scope.send();
Marieke 0:4d69864f1002 95
Marieke 0:4d69864f1002 96 led1 = 0;
Marieke 0:4d69864f1002 97 wait(0.5f);
Marieke 0:4d69864f1002 98 led1 = 1;
Marieke 1:278677bb6b99 99 wait(0.5f);*/
Marieke 1:278677bb6b99 100 }
Marieke 0:4d69864f1002 101
Marieke 0:4d69864f1002 102 // In the following: R is used for right arm, L is used for left arm!
Marieke 0:4d69864f1002 103 /*void FilteredSample()
Marieke 0:4d69864f1002 104 {
Marieke 0:4d69864f1002 105 double inR = emg0.read();
Marieke 0:4d69864f1002 106 double inL = emg1.read();
Marieke 0:4d69864f1002 107 //double inLcal = inL-averageL(sumL,size);
Marieke 0:4d69864f1002 108 double outRnotch = bq1.step(inR);
Marieke 0:4d69864f1002 109 double outRhigh = bq2.step(outRnotch);
Marieke 0:4d69864f1002 110 double outRrect = fabs(outRhigh);
Marieke 0:4d69864f1002 111 double outRlow = bcq.step(outRrect);
Marieke 0:4d69864f1002 112 double outLnotch = bq1.step(inL);
Marieke 0:4d69864f1002 113 double outLhigh = bq2.step(outLnotch);
Marieke 0:4d69864f1002 114 double outLrect = fabs(outLhigh);
Marieke 0:4d69864f1002 115 double outLlow = bcq.step(outLrect);
Marieke 0:4d69864f1002 116
Marieke 0:4d69864f1002 117 scope.set(0, inR);
Marieke 0:4d69864f1002 118 scope.set(1, inL);
Marieke 0:4d69864f1002 119 scope.set(2, outRlow);
Marieke 0:4d69864f1002 120 scope.set(3, outLlow);
Marieke 0:4d69864f1002 121
Marieke 0:4d69864f1002 122
Marieke 0:4d69864f1002 123 scope.send();
Marieke 0:4d69864f1002 124 // To indicate that the function is working, the LED is toggled
Marieke 0:4d69864f1002 125 led2 = !led2;
Marieke 0:4d69864f1002 126 }*/
Marieke 0:4d69864f1002 127
Marieke 0:4d69864f1002 128
Marieke 0:4d69864f1002 129 /*
Marieke 0:4d69864f1002 130 void average(double averageR, double averageL)
Marieke 0:4d69864f1002 131 {
Marieke 0:4d69864f1002 132 int averageR(int,int);
Marieke 0:4d69864f1002 133 int averageL(int,int);
Marieke 0:4d69864f1002 134 int size = 5000; //10/0.002
Marieke 0:4d69864f1002 135 int arrayR[size]; //declaring array
Marieke 0:4d69864f1002 136 int arrayL[size];
Marieke 0:4d69864f1002 137 int sumR = 0;
Marieke 0:4d69864f1002 138 int sumL = 0;
Marieke 0:4d69864f1002 139
Marieke 0:4d69864f1002 140 for (int i=0;i<size;i++)
Marieke 0:4d69864f1002 141 {
Marieke 0:4d69864f1002 142 double EMGright = emg0.read();
Marieke 0:4d69864f1002 143 double EMGleft = emg1.read();
Marieke 0:4d69864f1002 144 EMGright = arrayR[i];
Marieke 0:4d69864f1002 145 EMGleft = arrayL[i];
Marieke 0:4d69864f1002 146 sumL = sumL+arrayR[i];
Marieke 0:4d69864f1002 147 sumR=sumR+arrayR[i];
Marieke 0:4d69864f1002 148 //double averageR = sumR/arrayR;
Marieke 0:4d69864f1002 149 //double averageL = sumL/arrayL;
Marieke 0:4d69864f1002 150 }
Marieke 0:4d69864f1002 151 return averageR=sumR/sizeR;
Marieke 0:4d69864f1002 152 return averageL(sumL,sizeL);*/
Marieke 0:4d69864f1002 153
Marieke 1:278677bb6b99 154 float averageR(int sumR, int size)
Marieke 0:4d69864f1002 155 {
Marieke 1:278677bb6b99 156 return (float) sumR/size;
Marieke 0:4d69864f1002 157 }
Marieke 0:4d69864f1002 158
Marieke 1:278677bb6b99 159 float averageL(int sumL, int size)
Marieke 0:4d69864f1002 160 {
Marieke 1:278677bb6b99 161 return (float) sumL/size;
Marieke 0:4d69864f1002 162 }
Marieke 0:4d69864f1002 163
Marieke 0:4d69864f1002 164
Marieke 0:4d69864f1002 165 int main()
Marieke 0:4d69864f1002 166 {
Marieke 0:4d69864f1002 167 pc.baud(115200);
Marieke 0:4d69864f1002 168 led1=1;
Marieke 0:4d69864f1002 169 led2=1;
Marieke 0:4d69864f1002 170 t.attach(&KeepTrackOfTime,1.0); //taking the time in seconds
Marieke 0:4d69864f1002 171
Marieke 1:278677bb6b99 172 //for (;;) {
Marieke 1:278677bb6b99 173 //if (time_passed<=10)
Marieke 1:278677bb6b99 174 //{
Marieke 1:278677bb6b99 175 //sample_timer.attach(&sample, 0.002); //500Hz
Marieke 0:4d69864f1002 176
Marieke 1:278677bb6b99 177 /*float averageR(float,int);
Marieke 1:278677bb6b99 178 float averageL(float,int);
Marieke 0:4d69864f1002 179 int size = 500; //10/0.002
Marieke 0:4d69864f1002 180 int arrayR[size]; //declaring array
Marieke 0:4d69864f1002 181 int arrayL[size];
Marieke 0:4d69864f1002 182 int sumR = 0;
Marieke 0:4d69864f1002 183 int sumL = 0;
Marieke 1:278677bb6b99 184 float EMGright = emg0.read();
Marieke 1:278677bb6b99 185 float EMGleft = emg1.read();
Marieke 0:4d69864f1002 186
Marieke 0:4d69864f1002 187 for (int i=0;i<size;i++)
Marieke 0:4d69864f1002 188 {
Marieke 1:278677bb6b99 189 emg0.read() = arrayR[i];
Marieke 1:278677bb6b99 190 arrayL[i]= emg1.read();
Marieke 1:278677bb6b99 191 sumL = sumL+arrayL[i];
Marieke 0:4d69864f1002 192 sumR = sumR+arrayR[i];
Marieke 0:4d69864f1002 193 }
Marieke 0:4d69864f1002 194 // Calibration step with the gained averages
Marieke 0:4d69864f1002 195 //double CalibrationFactorR = 0.5/averageR(sumR,size);
Marieke 0:4d69864f1002 196 //double CalibrationFactorL = 0.5/averageL(sumL,size);
Marieke 1:278677bb6b99 197 */
Marieke 1:278677bb6b99 198 int size = 12500;
Marieke 1:278677bb6b99 199 int i;
Marieke 1:278677bb6b99 200 double EMGsumR;
Marieke 1:278677bb6b99 201 double EMGsumL;
Marieke 1:278677bb6b99 202
Marieke 1:278677bb6b99 203 while(i<size){
Marieke 1:278677bb6b99 204 sample();
Marieke 1:278677bb6b99 205 EMGsumR = emg0.read()+EMGsumR;
Marieke 1:278677bb6b99 206 EMGsumL = EMGleft+EMGsumL;
Marieke 1:278677bb6b99 207 i++;
Marieke 1:278677bb6b99 208 wait(0.0004);
Marieke 1:278677bb6b99 209 }
Marieke 1:278677bb6b99 210
Marieke 1:278677bb6b99 211 double averageEMGr = (double) EMGsumR/size;
Marieke 1:278677bb6b99 212 double averageEMGl = (double) EMGsumL/size;
Marieke 1:278677bb6b99 213 double InRcal = emg0.read()-averageEMGr;
Marieke 1:278677bb6b99 214 double InLcal = emg1.read()-averageEMGl;
Marieke 1:278677bb6b99 215
Marieke 1:278677bb6b99 216 led1 =!led1;
Marieke 1:278677bb6b99 217 //wait(0.5f);
Marieke 0:4d69864f1002 218
Marieke 0:4d69864f1002 219 /*scope.set(0, emg0.read() );
Marieke 0:4d69864f1002 220 scope.set(1, 1 );
Marieke 0:4d69864f1002 221 scope.set(2, averageEMGr);
Marieke 0:4d69864f1002 222 scope.set(3, averageL(sumL,size));
Marieke 0:4d69864f1002 223 scope.set(5, InRcal );
Marieke 0:4d69864f1002 224 scope.set(6, InLcal );
Marieke 0:4d69864f1002 225
Marieke 0:4d69864f1002 226 scope.send();*/
Marieke 1:278677bb6b99 227 //pc.printf("EMG-signal = %f\n\r",emg0.read());
Marieke 0:4d69864f1002 228 pc.printf("averageR = %f\n\r",averageEMGr);
Marieke 1:278677bb6b99 229 pc.printf("averageR = %f\n\r",averageEMGl);
Marieke 1:278677bb6b99 230 //pc.printf("averageRvoid = %f\n\r",averageR(sumR,size));
Marieke 1:278677bb6b99 231 //pc.printf("Detrend EMG = %f\n\r",InRcal);
Marieke 1:278677bb6b99 232 //pc.printf("array value = %f\n\r",arrayR[3]);
Marieke 1:278677bb6b99 233 pc.printf("test\n\r");
Marieke 1:278677bb6b99 234 pc.printf("EMG sum = %f\n\r",EMGsumR);
Marieke 1:278677bb6b99 235 pc.printf("EMG signal = %f\n\r",EMGright);
Marieke 0:4d69864f1002 236
Marieke 1:278677bb6b99 237 /*else
Marieke 0:4d69864f1002 238 {
Marieke 0:4d69864f1002 239
Marieke 0:4d69864f1002 240 led1 = 1;
Marieke 0:4d69864f1002 241 led2=!led2;
Marieke 0:4d69864f1002 242
Marieke 1:278677bb6b99 243 bcq.add(&bq3).add(&bq4).add(&bq5);
Marieke 0:4d69864f1002 244
Marieke 0:4d69864f1002 245 filter_timer.attach(&filter_timer_act, 0.0004); //2500Hz (same as with filter coefficients on matlab!!! Thus adjust!)
Marieke 0:4d69864f1002 246
Marieke 0:4d69864f1002 247 while(1)
Marieke 0:4d69864f1002 248 {
Marieke 0:4d69864f1002 249 if (filter_timer_go){
Marieke 0:4d69864f1002 250 filter_timer_go=false;
Marieke 0:4d69864f1002 251 FilteredSample();}
Marieke 1:278677bb6b99 252 }
Marieke 0:4d69864f1002 253
Marieke 1:278677bb6b99 254 }*/
Marieke 1:278677bb6b99 255
Marieke 0:4d69864f1002 256 }