Signalnumber bepalen
Dependencies: Encoder HIDScope biquadFilter mbed
Revision 0:9c203fdb48e0, committed 2017-10-26
- Comitter:
- peterknoben
- Date:
- Thu Oct 26 09:01:33 2017 +0000
- Commit message:
- Mean value en signalnumber bepalen
Changed in this revision
diff -r 000000000000 -r 9c203fdb48e0 Encoder.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Encoder.lib Thu Oct 26 09:01:33 2017 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/vsluiter/code/Encoder/#18b000b443af
diff -r 000000000000 -r 9c203fdb48e0 HIDScope.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HIDScope.lib Thu Oct 26 09:01:33 2017 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/tomlankhorst/code/HIDScope/#eade4ec5282b
diff -r 000000000000 -r 9c203fdb48e0 biquadFilter.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/biquadFilter.lib Thu Oct 26 09:01:33 2017 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/tomlankhorst/code/biquadFilter/#26861979d305
diff -r 000000000000 -r 9c203fdb48e0 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Oct 26 09:01:33 2017 +0000 @@ -0,0 +1,258 @@ +#include "mbed.h" +#include "encoder.h" +#include "BiQuad.h" +#include "HIDScope.h" +#include <complex> +#include <iostream> + + +AnalogIn potmeter1(A3); +AnalogIn emg0( A0 ); +AnalogIn emg1( A1 ); + +HIDScope scope( 3 ); +DigitalOut led(LED1); + +Ticker sample_timer; +Ticker MyTickerMean; + +//Constants------------------------------------ +const int n = 10; +//const int n2 = 10; +float emg0_filtered[n] = {}; +//float mean_filtered[n2] = {}; +int count = 0; +int count2 = 0; +const float controller_TS = 0.1; +float mean = 0.0; +float sum = 0.0; + + +//Constants EMG switch +const float LeftFastmin=0.075; +const float LeftFastmax=0.15; +const float LeftSlowmin=0.2; +const float LeftSlowmax=0.35; +const float RightSlowmin=0.4; +const float RightSlowmax=0.65; +const float RightFastmin=0.7; +const float RightFastmax=1.5; +int SignalNumber = 0; +int numberOfSet = 0; +const int action =50; + + +//Functions--------------------------------------- +float read_pot(double potmeter){ + float pot_value = potmeter; + return pot_value; +} +/* +float get_sum(float array[], const int n){ + float sum_math = 0.0; + for (int m=0 ; m<n ; m++ ){ + sum_math = sum_math + array[m]; + } + return sum_math; +}*/ + +float get_sum(float array[], const int n){ + float sum_math = 0.0; + for (int m=0 ; m<n ; m++ ){ + sum_math = sum_math + array[m]; + } + return sum_math; +} + + + +float get_mean_value(){ + emg0_filtered[count] = read_pot(potmeter1); + count++; + if (count == n){ + count = 0; + } + float mean_math = get_sum(emg0_filtered,n)/n; + return mean_math; +} + +//---------------------------------------------------- + + +void get_Signal_number(){ + mean = get_mean_value(); + //Check first case + if( mean < LeftFastmin ) { + if (count2 <action){ + mean = get_mean_value(); + if(mean < LeftFastmin){ + count2++; + } + else{ + count2=0; + SignalNumber=0; + } + } + else{ + SignalNumber = 0; + count2=0; + } + } + //Check second case + else if(mean <= LeftFastmax and mean > LeftFastmin){ + if (count2 <action){ + mean = get_mean_value(); + if(mean <=LeftFastmax and mean>LeftFastmin){ + count2++; + } + else{ + count2=0; + SignalNumber=0; + } + } + else{ + SignalNumber = 1; + count2=0; + } + } + else if( mean <=LeftSlowmax and mean>LeftSlowmin) { + if (count2 <action){ + mean = get_mean_value(); + if(mean <=LeftSlowmax and mean>LeftSlowmin){ + count2++; + } + else{ + count2=0; + SignalNumber=0; + } + } + else{ + SignalNumber = 2; + count2=0; + } + } + else if( mean <=RightSlowmax and mean>RightSlowmin) { + if (count2 <action){ + mean = get_mean_value(); + if(mean <=RightSlowmax and mean>RightSlowmin){ + count2++; + } + else{ + count2=0; + SignalNumber=0; + } + } + else{ + SignalNumber = 3; + count2=0; + } + } + else if( mean <=RightFastmax and mean>RightFastmin ) { + if (count2 <action){ + mean = get_mean_value(); + if(mean <=RightFastmax and mean>RightFastmin){ + count2++; + } + else{ + count2=0; + SignalNumber=0; + } + } + else{ + SignalNumber = 4; + count2=0; + } + } + else{ + count2=0; + SignalNumber =0; + } +} + +/*switch(SignalNumber) + { + case 0: //Standstill + motor1Direction=1; + motor1Speed=0; + printf("Motor 1 is standing still\n"); + break; + case 1: //Move Left fast + motor1Direction=1; + motor1Speed=1; + printf("Motor 1 is moving left fast\n"); + break; + case 2: //Move Left slow (movement speed is half of that of fast movement) + motor1Direction=1; + motor1Speed=0.5; + printf("Motor 1 is moving left slow\n"); + break; + case 3: //Move right slow + motor1Direction=0; + motor1Speed=0.5; + printf("Motor 1 is moving right slow\n"); + break; + case 4: //Move right fast + motor1Direction=0; + motor1Speed=1; + printf("Motor 1 is moving right fast\n"); + break; + default : //if something is wrong, standstill + motor1Direction=1; + motor1Speed=0; + printf("Motor 1 is standing still, something went wrong\n") + +}*/ + + + + +///----------------------------------------------------------------------- +/** Sample function + * this function samples the emg and sends it to HIDScope + **/ + +// Example: 4th order Butterworth LP (w_c = 0.1*f_nyquist) +BiQuad LP1( 0.6389437261127493, 1.2778874522254986, 0.6389437261127493, 1.1429772843080919, 0.4127976201429053 ); //Lowpass filter Biquad +BiQuad HP2( 0.8370879899975344, -1.6741759799950688, 0.8370879899975344, -1.6474576182593796, 0.7008943417307579 ); //Highpass filter Biquad +BiQuad NO3( 0.7063988100714527, -1.1429772843080923, 0.7063988100714527, -1.1429772843080923, 0.41279762014290533); //Notch filter Biquad +BiQuadChain BiQuad_filter; +float Signal; +float Signal_filtered; + +// Add the biquads to the chain + + +void sample() +{ + Signal=(emg0+emg1)/2; + Signal_filtered= BiQuad_filter.step(Signal); + /* Set the sampled emg values in channel 0 (the first channel) and 1 (the second channel) in the 'HIDScope' instance named 'scope' */ + scope.set(0, emg0.read() ); + scope.set(1, emg1.read() ); + scope.set(2, Signal_filtered); + /* Repeat the step above if required for more channels of required (channel 0 up to 5 = 6 channels) + * Ensure that enough channels are available (HIDScope scope( 2 )) + * Finally, send all channels to the PC at once */ + scope.send(); + /* To indicate that the function is working, the LED is toggled */ + led = !led; +} + + + + + + + + +int main() +{ + BiQuad_filter.add( &LP1 ).add( &HP2 ).add( &NO3); + + MyTickerMean.attach(&get_Signal_number, controller_TS); + sample_timer.attach(&sample, 0.02); + + while (true) {} + +} +
diff -r 000000000000 -r 9c203fdb48e0 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Oct 26 09:01:33 2017 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/aae6fcc7d9bb \ No newline at end of file