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
Diff: emg.cpp
- Revision:
- 21:49362a17495b
- Parent:
- 19:34c129b055b6
- Child:
- 22:8c9dda710584
diff -r 9b4587fba6b0 -r 49362a17495b emg.cpp
--- a/emg.cpp Tue Oct 20 08:09:01 2015 +0000
+++ b/emg.cpp Tue Oct 20 09:42:03 2015 +0000
@@ -3,16 +3,13 @@
#include "emg.h"
//Define objects
-AnalogIn emg(A0); //Analog input
-Ticker sample_timer;
+AnalogIn emgIn0(A0); //Analog input
+AnalogIn emgIn1(A1); //Analog input
+AnalogIn emgIn2(A2); //Analog input
HIDScope scope(2);
double highV[4];
double lowV[4];
-// An array which stores the last MOV_AVG_NUM outputs
-double lastOutputs[MOV_AVG_NUM-1];
-// The sum of the last MOV_AVG_NUM outputs
-double outputSum;
double filter(double input, double coeff_input[], double coeff_output[], double prev_outputs[])
{
@@ -38,43 +35,25 @@
return filter(u, fh_a, fh_b, highV);
}
-double fl_b[]= {0.00000658, 0.00002631, 0.00003947, 0.00002631, 0.00000658};
-double fl_a[]= {1.0000, -3.7264, 5.2160, -3.2500, 0.7605};
+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 lowpass_filter(double u)
{
return filter(u, fl_a, fl_b, lowV);
}
-void sample()
+/** Sample function
+ * this function samples the emg and sends it to HIDScope
+ **/
+double sample(int emgNum)
{
- double input = emg.read();
+ double input = 0.0;
+ if(emgNum == 1) input = emgIn1.read();
+ if(emgNum == 2) input = emgIn2.read();
+ else input = emgIn0.read();
double output1 = highpass_filter(input);
double output2 = fabs(output1);
double output3 = lowpass_filter(output2);
- /* Calculate the average of the last MOV_AVG_NUM outputs and the new input */
- outputSum = outputSum - lastOutputs[MOV_AVG_NUM-2] + output3;
- for(int i=0; i<MOV_AVG_NUM-1; i++) {
- if(i != 0) lastOutputs[i] = lastOutputs[i-1];
- }
- lastOutputs[0] = output3;
- output3 = outputSum/MOV_AVG_NUM;
-
- /* Second, set the sampled emg value in channel zero (the first channel) in the 'HIDScope' variable named 'scope' */
- scope.set(0,input);
- scope.set(1,output3);
- /* Repeat the step above if required for more channels (channel 0 up to 5 = 6 channels) */
- /* Finally, send all channels to the PC at once */
- scope.send();
-}
-
-/*
-int main()
-{
- //Attach the 'sample' function to the timer 'sample_timer'. this ensures that 'sample' is executed every... 0.002 seconds
-
- sample_timer.attach(&sample, 0.002);
-
- //empty loop, sample() is executed periodically
- while(1) {}
-}*/
\ No newline at end of file
+ return output3;
+}
\ No newline at end of file
