Laurette Buitenhuis / Mbed 2 deprecated EMG_en_kalibratie

Dependencies:   HIDScope MODSERIAL biquadFilter mbed

Committer:
laurette
Date:
Tue Nov 01 14:44:00 2016 +0000
Revision:
1:83f7e225f7a4
Parent:
0:9033b790f263
Child:
2:0c8c3ae5e1b7
Met printf, knopje werkt wel. Maar niet 5 seconde meting..

Who changed what in which revision?

UserRevisionLine numberNew contents of line
laurette 0:9033b790f263 1 #include "mbed.h"
laurette 0:9033b790f263 2 #include "HIDScope.h"
laurette 0:9033b790f263 3 #include "BiQuad.h"
laurette 0:9033b790f263 4 #include "math.h"
laurette 0:9033b790f263 5 #include "MODSERIAL.h"
laurette 0:9033b790f263 6
laurette 0:9033b790f263 7 //Define EMG input
laurette 0:9033b790f263 8 AnalogIn emg0( A0 );
laurette 0:9033b790f263 9 AnalogIn emg1( A1 );
laurette 0:9033b790f263 10 AnalogIn emg2( A2 );
laurette 0:9033b790f263 11 MODSERIAL pc (USBTX, USBRX);
laurette 1:83f7e225f7a4 12 InterruptIn knopje1 (SW2);
laurette 0:9033b790f263 13
laurette 0:9033b790f263 14 Ticker sample_timer;
laurette 0:9033b790f263 15 HIDScope scope( 3 ); // 3-channel HIDScope object
laurette 0:9033b790f263 16
laurette 0:9033b790f263 17 double signaal;
laurette 0:9033b790f263 18 double maximum;
laurette 0:9033b790f263 19 double Spier1Max;
laurette 0:9033b790f263 20 double Spier2Max;
laurette 0:9033b790f263 21 double Spier3Max;
laurette 0:9033b790f263 22 int x = 0;
laurette 0:9033b790f263 23 bool y = true;
laurette 0:9033b790f263 24
laurette 0:9033b790f263 25 // Filter coordinates of lowpass/highpass filter before rectifier and lowpassfilter for the envelope
laurette 0:9033b790f263 26 const double b0_low = 0.2929, b1_low = 0.5858, b2_low = 0.2929, a1_low = 0, a2_low = 0.1716;
laurette 0:9033b790f263 27 const double b0_high = 0.9978, b1_high = -1.9956, b2_high = 0.9978, a1_high = -1.9956, a2_high = 0.9956;
laurette 0:9033b790f263 28 const double b0_envelope = 2.2059E-5, b1_envelope = 4.4119E-4, b2_envelope = 2.2059E-5, a1_envelope = -1.9867, a2_envelope = 0.9868;
laurette 0:9033b790f263 29
laurette 0:9033b790f263 30 double Spier1, Spier2, Spier3; // Gefilterde output
laurette 0:9033b790f263 31
laurette 0:9033b790f263 32 // Biquad filters (lowpass and highpass become a chain in the int main)
laurette 0:9033b790f263 33 BiQuad lowpass1(b0_low, b1_low , b2_low, a1_low, a2_low);
laurette 0:9033b790f263 34 BiQuad lowpass2(b0_low, b1_low , b2_low, a1_low, a2_low);
laurette 0:9033b790f263 35 BiQuad lowpass3(b0_low, b1_low , b2_low, a1_low, a2_low);
laurette 0:9033b790f263 36 BiQuad highpass1(b0_high, b1_high , b2_high, a1_high, a2_high);
laurette 0:9033b790f263 37 BiQuad highpass2(b0_high, b1_high , b2_high, a1_high, a2_high);
laurette 0:9033b790f263 38 BiQuad highpass3(b0_high, b1_high , b2_high, a1_high, a2_high);
laurette 0:9033b790f263 39 BiQuad envelope1(b0_envelope, b1_envelope , b2_envelope, a1_envelope, a2_envelope);
laurette 0:9033b790f263 40 BiQuad envelope2(b0_envelope, b1_envelope , b2_envelope, a1_envelope, a2_envelope);
laurette 0:9033b790f263 41 BiQuad envelope3(b0_envelope, b1_envelope , b2_envelope, a1_envelope, a2_envelope);
laurette 0:9033b790f263 42 BiQuadChain bandpass1;
laurette 0:9033b790f263 43 BiQuadChain bandpass2;
laurette 0:9033b790f263 44 BiQuadChain bandpass3;
laurette 0:9033b790f263 45
laurette 0:9033b790f263 46 // Sample function, this function samples the emg and sends it to HIDScope
laurette 0:9033b790f263 47 void filtering()
laurette 0:9033b790f263 48 {
laurette 0:9033b790f263 49 Spier1 = bandpass1.step(emg0);
laurette 0:9033b790f263 50 Spier2 = bandpass2.step(emg1);
laurette 0:9033b790f263 51 Spier3 = bandpass3.step(emg2);
laurette 0:9033b790f263 52 Spier1 = fabs(Spier1);
laurette 0:9033b790f263 53 Spier2 = fabs(Spier2);
laurette 0:9033b790f263 54 Spier3 = fabs(Spier3);
laurette 0:9033b790f263 55 Spier1 = envelope1.step(Spier1);
laurette 0:9033b790f263 56 Spier2 = envelope2.step(Spier2);
laurette 0:9033b790f263 57 Spier3 = envelope3.step(Spier3);
laurette 0:9033b790f263 58
laurette 0:9033b790f263 59 // Set the sampled and filtered emg values in channel 0/1/2 in the 'HIDScope' instance named 'scope'
laurette 0:9033b790f263 60 scope.set(0, Spier1 );
laurette 0:9033b790f263 61 scope.set(1, Spier2 );
laurette 0:9033b790f263 62 scope.set(2, Spier3 );
laurette 0:9033b790f263 63
laurette 0:9033b790f263 64 scope.send(); // Sends all channels to the PC at once
laurette 0:9033b790f263 65 }
laurette 0:9033b790f263 66
laurette 0:9033b790f263 67 float GetMaximumSpier1()
laurette 0:9033b790f263 68 {
laurette 0:9033b790f263 69 maximum = Spier1;
laurette 0:9033b790f263 70 for(int i = 0; i<250000;i++)
laurette 0:9033b790f263 71 {
laurette 0:9033b790f263 72 signaal = Spier1;
laurette 0:9033b790f263 73 if(signaal>maximum)
laurette 0:9033b790f263 74 {
laurette 0:9033b790f263 75 maximum = signaal;
laurette 0:9033b790f263 76 }
laurette 0:9033b790f263 77 else
laurette 0:9033b790f263 78 {
laurette 0:9033b790f263 79 maximum = maximum;
laurette 0:9033b790f263 80 }
laurette 0:9033b790f263 81 }
laurette 0:9033b790f263 82 return maximum;
laurette 0:9033b790f263 83 }
laurette 0:9033b790f263 84
laurette 0:9033b790f263 85 float GetMaximumSpier2()
laurette 0:9033b790f263 86 {
laurette 0:9033b790f263 87 maximum = Spier2;
laurette 0:9033b790f263 88 for(int i = 0; i<250000;i++)
laurette 0:9033b790f263 89 {
laurette 0:9033b790f263 90 signaal = Spier2;
laurette 0:9033b790f263 91 if(signaal>maximum)
laurette 0:9033b790f263 92 {
laurette 0:9033b790f263 93 maximum = signaal;
laurette 0:9033b790f263 94 }
laurette 0:9033b790f263 95 else
laurette 0:9033b790f263 96 {
laurette 0:9033b790f263 97 maximum = maximum;
laurette 0:9033b790f263 98 }
laurette 0:9033b790f263 99 }
laurette 0:9033b790f263 100 return maximum;
laurette 0:9033b790f263 101 }
laurette 0:9033b790f263 102
laurette 0:9033b790f263 103 float GetMaximumSpier3()
laurette 0:9033b790f263 104 {
laurette 0:9033b790f263 105 maximum = Spier3;
laurette 0:9033b790f263 106 for(int i = 0; i<250000;i++)
laurette 0:9033b790f263 107 {
laurette 0:9033b790f263 108 signaal = Spier3;
laurette 0:9033b790f263 109 if(signaal>maximum)
laurette 0:9033b790f263 110 {
laurette 0:9033b790f263 111 maximum = signaal;
laurette 0:9033b790f263 112 }
laurette 0:9033b790f263 113 else
laurette 0:9033b790f263 114 {
laurette 0:9033b790f263 115 maximum = maximum;
laurette 0:9033b790f263 116 }
laurette 0:9033b790f263 117 }
laurette 0:9033b790f263 118 return maximum;
laurette 0:9033b790f263 119 }
laurette 0:9033b790f263 120
laurette 0:9033b790f263 121 void GoOn()
laurette 0:9033b790f263 122 {
laurette 0:9033b790f263 123 x++;
laurette 0:9033b790f263 124 y = false;
laurette 1:83f7e225f7a4 125 pc.printf("GoOn x=%i en y=%i\n\r",x,y);
laurette 0:9033b790f263 126 }
laurette 0:9033b790f263 127
laurette 0:9033b790f263 128 void StartMeting()
laurette 0:9033b790f263 129 {
laurette 0:9033b790f263 130 switch(x)
laurette 0:9033b790f263 131 {
laurette 0:9033b790f263 132 case 0:
laurette 0:9033b790f263 133 pc.printf("case 0\n\r");
laurette 0:9033b790f263 134 y = true;
laurette 1:83f7e225f7a4 135 while(y == true) {pc.printf("%i",y);}
laurette 1:83f7e225f7a4 136 break;
laurette 0:9033b790f263 137 case 1:
laurette 0:9033b790f263 138 pc.printf("case 1\n\r");
laurette 0:9033b790f263 139 Spier1Max = GetMaximumSpier1();
laurette 0:9033b790f263 140 pc.printf("Spier1Max = %f\n\r",Spier1Max);
laurette 0:9033b790f263 141 y = true;
laurette 1:83f7e225f7a4 142 while(y == true) {pc.printf("%i",y);}
laurette 1:83f7e225f7a4 143 break;
laurette 0:9033b790f263 144 case 2:
laurette 0:9033b790f263 145 pc.printf("case 2\n\r");
laurette 0:9033b790f263 146 Spier2Max = GetMaximumSpier2();
laurette 0:9033b790f263 147 pc.printf("Spier2Max = %f\n\r",Spier2Max);
laurette 0:9033b790f263 148 y = true;
laurette 1:83f7e225f7a4 149 while (y == true) {pc.printf("%i",y);}
laurette 1:83f7e225f7a4 150 break;
laurette 0:9033b790f263 151 case 3:
laurette 0:9033b790f263 152 pc.printf("case 3\n\r");
laurette 0:9033b790f263 153 Spier3Max = GetMaximumSpier3();
laurette 0:9033b790f263 154 pc.printf("Spier3Max = %f\n\r",Spier3Max);
laurette 0:9033b790f263 155 y = true;
laurette 1:83f7e225f7a4 156 while (y == true) {pc.printf("%i",y);}
laurette 1:83f7e225f7a4 157 break;
laurette 0:9033b790f263 158 case 4:
laurette 0:9033b790f263 159 pc.printf("case 4\n\r");
laurette 0:9033b790f263 160 break;
laurette 0:9033b790f263 161 }
laurette 0:9033b790f263 162 }
laurette 0:9033b790f263 163
laurette 0:9033b790f263 164 int main()
laurette 0:9033b790f263 165 {
laurette 0:9033b790f263 166 bandpass1.add(&lowpass1).add(&highpass1);
laurette 0:9033b790f263 167 bandpass2.add(&lowpass2).add(&highpass2);
laurette 0:9033b790f263 168 bandpass3.add(&lowpass3).add(&highpass3);
laurette 0:9033b790f263 169 sample_timer.attach(&filtering, 0.001); // Attach the 'sample' function to the timer 'sample_timer'. This ensures that 'sample' is executed every 0.001 seconds = 1000 Hz
laurette 0:9033b790f263 170
laurette 0:9033b790f263 171 pc.baud(115200);
laurette 0:9033b790f263 172 pc.printf("START\n\r");
laurette 0:9033b790f263 173 knopje1.fall(GoOn);
laurette 0:9033b790f263 174 StartMeting();
laurette 1:83f7e225f7a4 175 StartMeting();
laurette 1:83f7e225f7a4 176 StartMeting();
laurette 1:83f7e225f7a4 177 StartMeting();
laurette 0:9033b790f263 178 pc.printf("Spiermax1 = %f\n\rSpiermax2 = %f\n\rSpier3max = %f\n\r\n\n",Spier1Max,Spier2Max,Spier3Max);
laurette 0:9033b790f263 179
laurette 0:9033b790f263 180 while(1) {} // Empty loop, sample() is executed periodically
laurette 0:9033b790f263 181 }