Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of EMG by
Revision 33:92b645af1388, committed 2015-11-03
- Comitter:
- AeroKev
- Date:
- Tue Nov 03 10:15:19 2015 +0000
- Parent:
- 32:00c6e3502bd9
- Commit message:
- Last Commit;
Changed in this revision
emg.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 00c6e3502bd9 -r 92b645af1388 emg.cpp --- a/emg.cpp Thu Oct 29 17:47:18 2015 +0000 +++ b/emg.cpp Tue Nov 03 10:15:19 2015 +0000 @@ -1,24 +1,21 @@ #include "mbed.h" -#include "HIDScope.h" -#define MOV_AVG_NUM 100 #include "math.h" //Define objects AnalogIn b_emg(A0); //Analog input bicep AnalogIn t_emg(A1); //Analog input tricep AnalogIn p_emg(A2); //Analog input bicep for push -//HIDScope scope_hid(6); -double b_highV[4]; -double b_lowV[4]; -double t_highV[4]; -double t_lowV[4]; -double p_highV[4]; -double p_lowV[4]; -double b_min = 10.0f; -double t_min = 10.0f; -double p_min = 10.0f; - +double b_highV[4]; +double b_lowV[4]; +double t_highV[4]; +double t_lowV[4]; +double p_highV[4]; +double p_lowV[4]; +double b_min = 10.0f; +double t_min = 10.0f; +double p_min = 10.0f; +double rust; double filter(double input, double coeff_input[], double coeff_output[], double prev_outputs[]) { @@ -36,16 +33,20 @@ prev_outputs[0] = new_input; return new_output; } + double fh_b[]= {0.7602, -3.0406, 4.5609, -3.0406, 0.7602}; double fh_a[]= {1, -3.4532, 4.5041, -2.6273, 0.5778}; + double b_highpass_filter(double u) { return filter(u, fh_a, fh_b, t_highV); } + double t_highpass_filter(double u) { return filter(u, fh_a, fh_b, b_highV); } + double p_highpass_filter(double u) { return filter(u, fh_a, fh_b, p_highV); @@ -53,22 +54,24 @@ double fl_b[]= {0.00001329, 0.00005317, 0.00007976, 0.00005317, 0.00001329}; double fl_a[]= {1.0000, -3.6717, 5.0680, -3.1160, 0.7199}; + double b_lowpass_filter(double u) { return filter(u, fl_a, fl_b, t_lowV); } + double t_lowpass_filter(double u) { return filter(u, fl_a, fl_b, b_lowV); } + double p_lowpass_filter(double u) { return filter(u, fl_a, fl_b, p_lowV); } -double rust; void emg_cal(int emg) { double mem[300]; @@ -93,7 +96,6 @@ } variance /=300; rust = mean-variance; - printf("Rust %f\r\n",rust); } if(emg == 1) { @@ -115,11 +117,8 @@ } variance /=300; b_min = mean-variance; - printf("b %f\r\n",b_min); - printf("r %f\r\n",rust); b_min += rust; b_min /= 2; - printf("b_min %f\r\n",b_min); } else if(emg == 2) { for(int i=0; i<900; i++) { @@ -140,11 +139,8 @@ } variance /=300; t_min = mean-variance; - printf("b %f\r\n",t_min); - printf("r %f\r\n",rust); t_min += rust; t_min /= 2; - printf("t_min %f\r\n",t_min); } else if(emg == 3) { @@ -166,17 +162,13 @@ } variance /=300; p_min = mean-variance; - printf("b %f\r\n",p_min); - printf("r %f\r\n",rust); p_min += rust; p_min /= 2; - printf("p_min %f\r\n",p_min); } } - /** Sample function * this function samples the emg and sends it to HIDScope **/ @@ -201,14 +193,6 @@ double output8 = fabs(output7); double output9 = p_lowpass_filter(output8); - /*double tot = output3; - for(int i=0; i<MOV_AVG_NUM-1; i++) { - tot += lastOutputs[i]; - if(i != 0) lastOutputs[i] = lastOutputs[i-1]; - } - lastOutputs[0] = output3; - output3 = tot/MOV_AVG_NUM;*/ - /* Second, set the sampled emg value in channel zero (the first channel) in the 'HIDScope' variable named 'scope' */ if (last_biceps == 0 and output3 > b_min+b_min*0.1) { @@ -218,25 +202,8 @@ } else { bicout = last_biceps; } - //printf("minbic %f\t",bicout); last_biceps = bicout; - /*if (output3>0.06) {//This is the output for the right bicep - bicout=1; - } else if(output3>0.04) { - bicout=0.5; - } else { - bicout=0; - }*/ - - /*if (output6>0.0561) {//this is the output for the right tricep - tricout=1; - } else if(output6>0.0380) { - tricout=0.5; - } else { - tricout=0; - }*/ - if (last_triceps == 0 and output6 > t_min+0.1*t_min) { tricout = 1; } else if(last_triceps == 1 and output6 < t_min-0.1*t_min) { @@ -244,26 +211,15 @@ } else { tricout = last_triceps; } - //printf("mintric %f\t",tricout); last_triceps = tricout; - if (last_push ==0 and output9>p_min+0.1*p_min) {//this is the output for the left bicep (the push motion) + if (last_push ==0 and output9>p_min+0.1*p_min) { pushout=1; } else if(last_push == 1 and output9<p_min-0.1*p_min) { pushout=0; } else { pushout = last_push; } - //printf("minpush %f\r\n",pushout); last_push = pushout; - - /*scope_hid.set(0,output3); - scope_hid.set(1,output6); - scope_hid.set(2,output9); - scope_hid.set(3,bicout); - scope_hid.set(4,tricout); - scope_hid.set(5,pushout); - - scope_hid.send();*/ } \ No newline at end of file