BMT M9 groep 7 / Mbed 2 deprecated EMG_final

Dependencies:   HIDScope MODSERIAL biquadFilter mbed

Fork of EMG_totaal by Margreeth de Breij

Files at this revision

API Documentation at this revision

Comitter:
Margreeth95
Date:
Wed Oct 07 18:26:10 2015 +0000
Parent:
18:12250e88037f
Child:
20:a0642e983da9
Commit message:
Aansturen lampje met EMG signaal werkt, laagdoorlaatfilter moet nog worden aangepast

Changed in this revision

MODSERIAL.lib Show annotated file Show diff for this revision Revisions of this file
biquadFilter.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MODSERIAL.lib	Wed Oct 07 18:26:10 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Sissors/code/MODSERIAL/#ea349f8d0ac5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/biquadFilter.lib	Wed Oct 07 18:26:10 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/tomlankhorst/code/biquadFilter/#e3bf917ae0a3
--- a/main.cpp	Tue Oct 06 14:38:12 2015 +0000
+++ b/main.cpp	Wed Oct 07 18:26:10 2015 +0000
@@ -1,48 +1,71 @@
 #include "mbed.h"
 #include "HIDScope.h"
+#include "MODSERIAL.h"
+#include "biquadFilter.h"
 
 //Define objects
     AnalogIn    EMG_left(A0); //Analog input
     AnalogIn    EMG_right(A1);   
     Ticker      SampleEMG;
     Ticker      ScopeTimer;
-    HIDScope    scope(1);
+    Ticker      serial;
+    HIDScope    scope(3);
+    DigitalOut led(LED_RED);
+    MODSERIAL pc(USBTX, USBRX);
+    
 
-// constant values
+// Declaring variables
     double EMG_L_f_v1 = 0, EMG_L_f_v2 = 0;
+    double EMG_L_fh=0;
+    double EMG_left_value;
+    double EMG_f1;
+    double EMG_f2;    
 
 // coëfficiënten
-    const double BiGainEMG_Lh = 1, BiGainEMG_Ll=1;
-    const double EMG_L_fh_a1 = -0.96608908283*BiGainEMG_Lh, EMG_L_fh_a2 = 0.0*BiGainEMG_Lh, EMG_L_fh_b0 = 1.0*BiGainEMG_Lh, EMG_L_fh_b1 = 1.0*BiGainEMG_Lh, EMG_L_fh_b2 = 0.0*BiGainEMG_Lh; //coefficients for high-pass filter
-    const double EMG_L_fl_a1 = -0.96608908283*BiGainEMG_Ll, EMG_L_fl_a2 = 0.0*BiGainEMG_Ll, EMG_L_fl_b0 = 1.0*BiGainEMG_Ll, EMG_L_fl_b1 = 1.0*BiGainEMG_Ll, EMG_L_fl_b2 = 0.0*BiGainEMG_Ll; // coefficients for low-pass filter
+    const double BiGainEMG_Lh = 0.723601, BiGainEMG_Ll=0.983892;
+    const double EMGh_a1 = -1.74355513773*BiGainEMG_Lh, EMGh_a2 = 0.80079826172*BiGainEMG_Lh, EMGh_b0 = 1.0*BiGainEMG_Lh, EMGh_b1 = -1.99697722433*BiGainEMG_Lh, EMGh_b2 = 1.0*BiGainEMG_Lh; //coefficients for high-pass filter
+    const double EMGl_a1 = 1.96775103303*BiGainEMG_Ll, EMGl_a2 = 0.96827054038*BiGainEMG_Ll, EMGl_b0 = 1.0*BiGainEMG_Ll, EMGl_b1 = 1.99999993582*BiGainEMG_Ll, EMGl_b2 = 1.0*BiGainEMG_Ll; // coefficients for low-pass filter
+    biquadFilter EMG_highpass (EMGh_a1, EMGh_a2, EMGh_b0, EMGh_b1, EMGh_b2);        // creates the high pass filter
+    biquadFilter EMG_lowpass (EMGl_a1, EMGl_a2, EMGl_b0, EMGl_b1, EMGl_b2);         // creates the low pass filter
+    
+// EMG filtering function
+void EMGfilter()
+{
+    EMG_left_value = EMG_left.read();
+    EMG_f1 = EMG_highpass.step(EMG_left_value);
+    EMG_f2 = EMG_lowpass.step(EMG_f1);
+}
 
 // HIDScope
     void ScopeSend()
     {
-        scope.set(0, EMG_left.read());
+        scope.set(0, EMG_left_value);
+        scope.set(1, EMG_f1);
+        scope.set(2, EMG_f2);
         scope.send();
     }
     
-// Biquad filter
-    double biquad( double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2 )
+// Serial communication
+    void serial_()
     {
-        double v = u - a1*v1 - a2*v2;
-        double y = b0*v + b1*v1 + b2*v2;
-        v2 = v1; v1 = v;
-        return y;
+        pc.baud(115200);
+        pc.printf("%d\n", EMG_L_fh);
     }
-            
-// EMG filtering function
-void EMGfilter()
-{
-    double EMG_left_value = EMG_left.read();
-    double EMG_L_fh = biquad(EMG_left_value, EMG_L_f_v1, EMG_L_f_v2, EMG_L_fh_a1, EMG_L_fh_a2, EMG_L_fh_b0, EMG_L_fh_b1, EMG_L_fh_b2); 
-    double EMG_L_fhl = biquad(EMG_L_fh, EMG_L_f_v1, EMG_L_f_v2, EMG_L_fl_a1, EMG_L_fl_a2, EMG_L_fl_b0, EMG_L_fl_b1, EMG_L_fl_b2); 
-}
-
+    
 int main()
 {
     SampleEMG.attach(&EMGfilter, 0.002);
     ScopeTimer.attach(&ScopeSend, 0.002);
-    while(1) {}
+    while(1) 
+    {
+        if (EMG_f2 > 0.08)
+        {
+            led.write(0);
+        }
+        
+        else
+        {
+            led.write(1);
+        }
+    }
 }
\ No newline at end of file