Sets threshold at 15% of maximum contraction
Dependencies: HIDScope MODSERIAL Math MovingAverage biquadFilter mbed
Revision 0:91d5c871dbf9, committed 2018-10-26
- Comitter:
- Roooos
- Date:
- Fri Oct 26 11:07:02 2018 +0000
- Commit message:
- Sets threshold at 15% of maximum contraction
Changed in this revision
diff -r 000000000000 -r 91d5c871dbf9 HIDScope.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HIDScope.lib Fri Oct 26 11:07:02 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/tomlankhorst/code/HIDScope/#eade4ec5282b
diff -r 000000000000 -r 91d5c871dbf9 MODSERIAL.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MODSERIAL.lib Fri Oct 26 11:07:02 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Sissors/code/MODSERIAL/#8c8d13e1840b
diff -r 000000000000 -r 91d5c871dbf9 Math.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Math.lib Fri Oct 26 11:07:02 2018 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/users/inst/code/Math/#067c036b09e0
diff -r 000000000000 -r 91d5c871dbf9 MovingAverage.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MovingAverage.lib Fri Oct 26 11:07:02 2018 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/users/fblanc/code/MovingAverage/#ad69440a9bef
diff -r 000000000000 -r 91d5c871dbf9 biquadFilter.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/biquadFilter.lib Fri Oct 26 11:07:02 2018 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/users/tomlankhorst/code/biquadFilter/#26861979d305
diff -r 000000000000 -r 91d5c871dbf9 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Oct 26 11:07:02 2018 +0000 @@ -0,0 +1,101 @@ +#include "mbed.h" +#include "HIDScope.h" +#include "BiQuad.h" +#include "MovingAverage.h" +#include "MODSERIAL.h" +#include "math.h" +#define NSAMPLE 200 + +//Define objects +AnalogIn emg0( A0 ); //Biceps Left +AnalogIn emg1( A1 ); //Biceps Right +Ticker sample_timer; +InterruptIn button(PTC6); + +//Ticker driving_timer; +HIDScope scope( 4 ); //Number of Channels +DigitalOut led1(LED_RED); +DigitalOut led2(LED_GREEN); +DigitalOut led3(LED_BLUE); +MovingAverage <double>Movag_LB(NSAMPLE,0.0); //Make Moving Average, Define NSAMPLE above +MovingAverage <double>Movag_RB(NSAMPLE,0.0); +volatile double LB_Out; +volatile double RB_Out; + +MODSERIAL pc(USBTX, USBRX); + +//Make Biquad filters Left(a0, a1, a2, b1, b2) +BiQuadChain bqc1; //chain voor High Pass en Notch +BiQuad bq1(0.39131200825291007, -0.7826240165058201, 0.39131200825291007, -0.36950493743858204, 0.1957430955730582); //High Pass Filter +BiQuad bq2(9.91104e-01, -1.60364e+00, 9.91104e-01, -1.60364e+00, 9.82207e-01); //Notch Filter +//BiQuad bq3(0.00044924972004654657, 0.0008984994400930931, 0.00044924972004654657, -1.6169385656964415, 0.6187355645766276); //Low Pass Filter + +//Make Biquad filters Right +BiQuadChain bqc2; //chain voor High Pass en Notch +BiQuad bq4(0.39131200825291007, -0.7826240165058201, 0.39131200825291007, -0.36950493743858204, 0.1957430955730582); //High Pass Filter +BiQuad bq5(9.91104e-01, -1.60364e+00, 9.91104e-01, -1.60364e+00, 9.82207e-01); //Notch Filter + +volatile double MaxLeft = 0.0; +volatile double MaxRight = 0.0; +volatile double ThresholdLeft = 0.0; +volatile double ThresholdRight = 0.0; + +//Function to read samples and filter and send to HIDScope +void sample() +{ + //Filter Left Bicep + double LB_Filter_1 = bqc1.step(emg0.read()); //High Pass + Notch + double LB_Rectify = fabs(LB_Filter_1); //Rectify Signal + //double Filtered_emg_1 = bq3.step(LB_Rectify); //Low Pass + Movag_LB.Insert(LB_Rectify); + LB_Out = Movag_LB.GetAverage(); + + //Filter Right Bicep + double RB_Filter_1 = bqc2.step(emg1.read()); //High Pass + Notch + double RB_Rectify = fabs(RB_Filter_1); //Rectify Signal + //double Filtered_emg_1 = bq3.step(RB_Rectify); //Low Pass + Movag_RB.Insert(RB_Rectify); + RB_Out = Movag_RB.GetAverage(); + + scope.set(0, emg0.read() ); //Raw EMG signal left bicep + scope.set(1, LB_Out); // Filtered EMG signal left bicep + scope.set(2, emg1.read()); //Raw EMG signal right bicep + scope.set(3, RB_Out); //Filtered EMG signal right bicep + + scope.send(); + + if(LB_Out > MaxLeft) { + MaxLeft = LB_Out; + led2 = 0; + } + else { + led2 = 1; + } + if(RB_Out > MaxRight) { + MaxRight = RB_Out; + led3 = 0; + } + else { + led3 = 1; + } + ThresholdLeft = abs(0.15000*MaxLeft); + ThresholdRight = abs(0.15000*MaxRight); + +} + +void PrintThreshold() +{ + pc.baud(115200); + pc.printf("left: %.3f threshold : %.3f\r\n right: %.3f threshold : %.3f\r\n ",MaxLeft, ThresholdLeft,MaxRight,ThresholdRight); +} + + +int main() +{ + bqc1.add( &bq1 ).add( &bq2 ); //make BiQuadChain + bqc2.add( &bq4 ).add( &bq5 ); //make BiQuadChain + sample_timer.attach(&sample, 0.002); //read samples at 500 Hz + button.fall(&PrintThreshold); + while(1) {} +} +
diff -r 000000000000 -r 91d5c871dbf9 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Oct 26 11:07:02 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/aae6fcc7d9bb \ No newline at end of file