Marieke M / Mbed 2 deprecated frdm_calibratie_maximum

Dependencies:   mbed HIDScope biquadFilter

Committer:
Marieke
Date:
Thu Oct 20 20:44:51 2016 +0000
Revision:
0:4d69864f1002
Child:
1:278677bb6b99
average taking with putty

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 0:4d69864f1002 61 //average_timer_go=false,
Marieke 0:4d69864f1002 62 // Activates go-flags
Marieke 0:4d69864f1002 63 //void average_timer_act(){average_timer_go=true;};
Marieke 0:4d69864f1002 64 /*void filter_timer_act(){filter_timer_go=true;};
Marieke 0:4d69864f1002 65
Marieke 0:4d69864f1002 66 BiQuadChain bcq;
Marieke 0:4d69864f1002 67 // Notch filter wo=50; bw=wo/35
Marieke 0:4d69864f1002 68 BiQuad bq1(9.7805e-01,-1.1978e-16,9.7805e-01,1.0000e+00,-1.1978e-16,9.5610e-01);
Marieke 0:4d69864f1002 69 // High pass Butterworth filter 2nd order, Fc=10;
Marieke 0:4d69864f1002 70 BiQuad bq2(9.8239e-01,-1.9648e+00,9.8239e-01,1.0000e+00,-1.9645e+00,9.6508e-01);
Marieke 0:4d69864f1002 71 // Low pass Butterworth filter 2nd order, Fc = 8;
Marieke 0:4d69864f1002 72 BiQuad bq3(5.6248e-05,1.1250e-04,5.6248e-05,1.0000e+00,-1.9787e+00,9.7890e-01);
Marieke 0:4d69864f1002 73 // Low pass Butterworth filter 4th order, Fc = 450; plited up in 2x2nd order
Marieke 0:4d69864f1002 74 BiQuad bq4(1.0000e+00,2.0000e+00,1.0000e+00,1.0000e+00,-4.6382e-01,8.9354e-02);
Marieke 0:4d69864f1002 75 BiQuad bq5(1.0000e+00,2.0000e+00,1.0000e+00,1.0000e+00,-6.3254e-01,4.8559e-01);*/
Marieke 0:4d69864f1002 76
Marieke 0:4d69864f1002 77 void KeepTrackOfTime()
Marieke 0:4d69864f1002 78 {
Marieke 0:4d69864f1002 79 time_passed++;
Marieke 0:4d69864f1002 80 }
Marieke 0:4d69864f1002 81
Marieke 0:4d69864f1002 82 /*void sample()
Marieke 0:4d69864f1002 83 {
Marieke 0:4d69864f1002 84 scope.set(0, emg0.read() );
Marieke 0:4d69864f1002 85 scope.set(1, emg1.read() );
Marieke 0:4d69864f1002 86
Marieke 0:4d69864f1002 87 scope.send();
Marieke 0:4d69864f1002 88
Marieke 0:4d69864f1002 89 led1 = 0;
Marieke 0:4d69864f1002 90 wait(0.5f);
Marieke 0:4d69864f1002 91 led1 = 1;
Marieke 0:4d69864f1002 92 wait(0.5f);
Marieke 0:4d69864f1002 93 }*/
Marieke 0:4d69864f1002 94
Marieke 0:4d69864f1002 95 // In the following: R is used for right arm, L is used for left arm!
Marieke 0:4d69864f1002 96 /*void FilteredSample()
Marieke 0:4d69864f1002 97 {
Marieke 0:4d69864f1002 98 double inR = emg0.read();
Marieke 0:4d69864f1002 99 double inL = emg1.read();
Marieke 0:4d69864f1002 100 //double inLcal = inL-averageL(sumL,size);
Marieke 0:4d69864f1002 101 double outRnotch = bq1.step(inR);
Marieke 0:4d69864f1002 102 double outRhigh = bq2.step(outRnotch);
Marieke 0:4d69864f1002 103 double outRrect = fabs(outRhigh);
Marieke 0:4d69864f1002 104 double outRlow = bcq.step(outRrect);
Marieke 0:4d69864f1002 105 double outLnotch = bq1.step(inL);
Marieke 0:4d69864f1002 106 double outLhigh = bq2.step(outLnotch);
Marieke 0:4d69864f1002 107 double outLrect = fabs(outLhigh);
Marieke 0:4d69864f1002 108 double outLlow = bcq.step(outLrect);
Marieke 0:4d69864f1002 109
Marieke 0:4d69864f1002 110 scope.set(0, inR);
Marieke 0:4d69864f1002 111 scope.set(1, inL);
Marieke 0:4d69864f1002 112 scope.set(2, outRlow);
Marieke 0:4d69864f1002 113 scope.set(3, outLlow);
Marieke 0:4d69864f1002 114
Marieke 0:4d69864f1002 115
Marieke 0:4d69864f1002 116 scope.send();
Marieke 0:4d69864f1002 117 // To indicate that the function is working, the LED is toggled
Marieke 0:4d69864f1002 118 led2 = !led2;
Marieke 0:4d69864f1002 119 }*/
Marieke 0:4d69864f1002 120
Marieke 0:4d69864f1002 121
Marieke 0:4d69864f1002 122 /*
Marieke 0:4d69864f1002 123 void average(double averageR, double averageL)
Marieke 0:4d69864f1002 124 {
Marieke 0:4d69864f1002 125 int averageR(int,int);
Marieke 0:4d69864f1002 126 int averageL(int,int);
Marieke 0:4d69864f1002 127 int size = 5000; //10/0.002
Marieke 0:4d69864f1002 128 int arrayR[size]; //declaring array
Marieke 0:4d69864f1002 129 int arrayL[size];
Marieke 0:4d69864f1002 130 int sumR = 0;
Marieke 0:4d69864f1002 131 int sumL = 0;
Marieke 0:4d69864f1002 132
Marieke 0:4d69864f1002 133 for (int i=0;i<size;i++)
Marieke 0:4d69864f1002 134 {
Marieke 0:4d69864f1002 135 double EMGright = emg0.read();
Marieke 0:4d69864f1002 136 double EMGleft = emg1.read();
Marieke 0:4d69864f1002 137 EMGright = arrayR[i];
Marieke 0:4d69864f1002 138 EMGleft = arrayL[i];
Marieke 0:4d69864f1002 139 sumL = sumL+arrayR[i];
Marieke 0:4d69864f1002 140 sumR=sumR+arrayR[i];
Marieke 0:4d69864f1002 141 //double averageR = sumR/arrayR;
Marieke 0:4d69864f1002 142 //double averageL = sumL/arrayL;
Marieke 0:4d69864f1002 143 }
Marieke 0:4d69864f1002 144 return averageR=sumR/sizeR;
Marieke 0:4d69864f1002 145 return averageL(sumL,sizeL);*/
Marieke 0:4d69864f1002 146
Marieke 0:4d69864f1002 147 double averageR(int sumR, int size)
Marieke 0:4d69864f1002 148 {
Marieke 0:4d69864f1002 149 return (double) sumR/size;
Marieke 0:4d69864f1002 150 }
Marieke 0:4d69864f1002 151
Marieke 0:4d69864f1002 152 double averageL(int sumL, int size)
Marieke 0:4d69864f1002 153 {
Marieke 0:4d69864f1002 154 return (double) sumL/size;
Marieke 0:4d69864f1002 155 }
Marieke 0:4d69864f1002 156
Marieke 0:4d69864f1002 157
Marieke 0:4d69864f1002 158 int main()
Marieke 0:4d69864f1002 159 {
Marieke 0:4d69864f1002 160 pc.baud(115200);
Marieke 0:4d69864f1002 161 led1=1;
Marieke 0:4d69864f1002 162 led2=1;
Marieke 0:4d69864f1002 163 t.attach(&KeepTrackOfTime,1.0); //taking the time in seconds
Marieke 0:4d69864f1002 164
Marieke 0:4d69864f1002 165 for (;;) {
Marieke 0:4d69864f1002 166 if (time_passed<=30)
Marieke 0:4d69864f1002 167 {
Marieke 0:4d69864f1002 168 led1 =!led1;
Marieke 0:4d69864f1002 169 wait(0.5f);//sample_timer.attach(&sample, 0.002); //500Hz
Marieke 0:4d69864f1002 170
Marieke 0:4d69864f1002 171 double averageR(int,int);
Marieke 0:4d69864f1002 172 double averageL(int,int);
Marieke 0:4d69864f1002 173 int size = 500; //10/0.002
Marieke 0:4d69864f1002 174 int arrayR[size]; //declaring array
Marieke 0:4d69864f1002 175 int arrayL[size];
Marieke 0:4d69864f1002 176 int sumR = 0;
Marieke 0:4d69864f1002 177 int sumL = 0;
Marieke 0:4d69864f1002 178 double EMGright = emg0.read();
Marieke 0:4d69864f1002 179 double EMGleft = emg1.read();
Marieke 0:4d69864f1002 180
Marieke 0:4d69864f1002 181 for (int i=0;i<size;i++)
Marieke 0:4d69864f1002 182 {
Marieke 0:4d69864f1002 183 EMGright = arrayR[i];
Marieke 0:4d69864f1002 184 EMGleft = arrayL[i];
Marieke 0:4d69864f1002 185 sumL = sumL+arrayR[i];
Marieke 0:4d69864f1002 186 sumR = sumR+arrayR[i];
Marieke 0:4d69864f1002 187 }
Marieke 0:4d69864f1002 188 // Calibration step with the gained averages
Marieke 0:4d69864f1002 189 //double CalibrationFactorR = 0.5/averageR(sumR,size);
Marieke 0:4d69864f1002 190 //double CalibrationFactorL = 0.5/averageL(sumL,size);
Marieke 0:4d69864f1002 191 double averageEMGr = sumR/size;
Marieke 0:4d69864f1002 192 double averageEMGl = sumL/size;
Marieke 0:4d69864f1002 193 double InRcal = emg0.read()-averageR(sumR,size);
Marieke 0:4d69864f1002 194 double InLcal = emg1.read()-averageL(sumL,size);
Marieke 0:4d69864f1002 195
Marieke 0:4d69864f1002 196 /*scope.set(0, emg0.read() );
Marieke 0:4d69864f1002 197 scope.set(1, 1 );
Marieke 0:4d69864f1002 198 scope.set(2, averageEMGr);
Marieke 0:4d69864f1002 199 scope.set(3, averageL(sumL,size));
Marieke 0:4d69864f1002 200 scope.set(5, InRcal );
Marieke 0:4d69864f1002 201 scope.set(6, InLcal );
Marieke 0:4d69864f1002 202
Marieke 0:4d69864f1002 203 scope.send();*/
Marieke 0:4d69864f1002 204 pc.printf("EMG-signal = %f\n\r",emg0.read());
Marieke 0:4d69864f1002 205 pc.printf("averageR = %f\n\r",averageEMGr);
Marieke 0:4d69864f1002 206 pc.printf("averageRvoid = %f\n\r",averageR(sumR,size));
Marieke 0:4d69864f1002 207 pc.printf("Detrend EMG = %f\n\r",InRcal);
Marieke 0:4d69864f1002 208 }
Marieke 0:4d69864f1002 209
Marieke 0:4d69864f1002 210 else
Marieke 0:4d69864f1002 211 {
Marieke 0:4d69864f1002 212
Marieke 0:4d69864f1002 213 led1 = 1;
Marieke 0:4d69864f1002 214 led2=!led2;
Marieke 0:4d69864f1002 215
Marieke 0:4d69864f1002 216 /*bcq.add(&bq3).add(&bq4).add(&bq5);
Marieke 0:4d69864f1002 217
Marieke 0:4d69864f1002 218 filter_timer.attach(&filter_timer_act, 0.0004); //2500Hz (same as with filter coefficients on matlab!!! Thus adjust!)
Marieke 0:4d69864f1002 219
Marieke 0:4d69864f1002 220 while(1)
Marieke 0:4d69864f1002 221 {
Marieke 0:4d69864f1002 222 if (filter_timer_go){
Marieke 0:4d69864f1002 223 filter_timer_go=false;
Marieke 0:4d69864f1002 224 FilteredSample();}
Marieke 0:4d69864f1002 225 }*/
Marieke 0:4d69864f1002 226
Marieke 0:4d69864f1002 227 }
Marieke 0:4d69864f1002 228 }
Marieke 0:4d69864f1002 229 }