8 option EMG
Dependencies: HIDScope MODSERIAL QEI biquadFilter mbed
main.cpp
- Committer:
- relvorelvo
- Date:
- 2016-11-02
- Revision:
- 21:136a1ab8163c
- Parent:
- 20:97059009a491
- Child:
- 22:68ab712b62b2
File content as of revision 21:136a1ab8163c:
#include "mbed.h" #include "HIDScope.h" #include "BiQuad.h" #include "MODSERIAL.h" //Define objects AnalogIn emg1_in( A0 ); AnalogIn emg2_in( A1 ); Ticker sample_timer; HIDScope scope( 4 ); DigitalOut red(LED_RED); DigitalOut blue(LED_BLUE); DigitalOut green(LED_GREEN); MODSERIAL pc(USBTX, USBRX); // EMG variables double emg1; double emg1highfilter; double emg1notchfilter; double emg1abs double emg1lowfilter; double emg2; double emg2highfilter; double emg2notchfilter; double emg2abs double emg2lowfilter; // Filter settings BiQuad filterhigh(9.704e-01,-1.9408,9.704e-01,-1.9389,9.427e-01); BiQuad filternotch(9.495e-01,-1.8062,9.495e-01,-1.8062,8.992e-01) BiQuad filterlow(8.883e-01,1.7671,8.835e-01,1.7227,8.114e-01) // Filtering void filter() { emg1=emg1_in.read(); emg1highfilter=filterhigh.step(emg1); emg1notchfilter=filternotch.step(emg1highfilter); emg1abs=fabs(emg1notchfilter); emg1lowfilter=filterlow(emg1abs); emg2=emg2_in.read(); emg2highfilter=filterhigh.step(emg2); emg2notchfilter=filternotch.step(emg2highfilter); emg2abs=fabs(emg2notchfilter); emg2lowfilter=filterlow(emg2abs); void sample() { /* 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, emg1_in.read() ); scope.set(1, emg1lowfilter.read() ); scope.set(2, emg2_in.read() ); scope.set() emg2lowfilter.read() ); /* 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() { /**Attach the 'sample' function to the timer 'sample_timer'. * this ensures that 'sample' is executed every... 0.002 seconds = 500 Hz */ sample_timer.attach(&sample, 0.001); /*empty loop, sample() is executed periodically*/ while(1) {} }