emg trial

Dependencies:   FastPWM HIDScope MODSERIAL mbed biquadFilter

Revision:
4:bd4dd411dc7b
Parent:
3:b96d952083be
Child:
5:dd64e0cf20fe
--- a/main.cpp	Mon Oct 22 09:18:59 2018 +0000
+++ b/main.cpp	Mon Oct 22 13:05:16 2018 +0000
@@ -12,68 +12,112 @@
 
 
 // Define the HIDScope and Ticker objects
-HIDScope    scope(2);
+HIDScope    scope(4);
 Ticker      scopeTimer;
 Ticker      EMGTicker;
 
 // BiQuad filter
-BiQuad HP_emg(1,-2,1,1.142980502539901,0.412801598096189); //Highpassfilter
+BiQuad HP_emg1(1,-2,1,1.142980502539901,0.412801598096189); //Highpassfilter
+BiQuad HP_emg2(1,-2,1,1.142980502539901,0.412801598096189); //Highpassfilter
 
-double EMGdata;
+// Global variables
+double EMGdata1;
+double EMGdata2;
+int    count;
 
 void ReadEMG()
 { 
-    EMGdata = a0.read(); // store values in the scope
+    EMGdata1 = a0.read(); // store values in the scope
+    EMGdata2 = a1.read();
+    
 }
 
-double EMG_HP(double EMGdata)
+double EMG_HP1(double EMGdata) 
 {
-    double HP_abs_EMGdata = HP_emg.step(EMGdata);
+    double HP_abs_EMGdata = HP_emg1.step(EMGdata);
+    
+    return fabs(HP_abs_EMGdata);
+}
+
+double EMG_HP2(double EMGdata)
+{
+    double HP_abs_EMGdata = HP_emg2.step(EMGdata);
     
     return fabs(HP_abs_EMGdata);
 }
 
-double Moving_mean(double HP_abs_EMGdata)
+// Moving mean of EMG data 1
+double Moving_mean1(double HP_abs_EMGdata1)
 {
-    int P = 50;
-    double EMGarray[P];
+    int P1 = 50;
+    static double EMGarray1[50];
     
-    for(int i = P-1; i >= 0; i--)
+    for(int i1 = P1-1; i1 >= 1; i1--)
     {
-        if (i == 0) 
-        {
-            EMGarray[i] = HP_abs_EMGdata;
-        }
-        else 
-        {
-        EMGarray[i] = EMGarray[i-1];
-        }   
+        EMGarray1[i1] = EMGarray1[i1-1];  
     }
+    EMGarray1[0] = HP_abs_EMGdata1;
     
-    double sum;
+    double sum1 = 0.0;
     
-    for(int j=0; j<50; j++)
+    for(int j1=0; j1<50; j1++)
     {
-        sum += EMGarray[j];
+        sum1 += EMGarray1[j1];
         
     }
     
-    pc.printf("sum = %lf", sum);
-    double EMG_filt = sum / (double) P;
+    double EMG_filt_1 = sum1 / (double) P1;
+    
+    return EMG_filt_1;
+}
+
+// Moving mean of EMG data 2
+double Moving_mean2(double HP_abs_EMGdata2)
+{
+    int P2 = 50;
+    static double EMGarray2[50];
     
-    return(EMG_filt);
+    for(int i2 = P2-1; i2 >= 1; i2--)
+    {
+        EMGarray2[i2] = EMGarray2[i2-1];    
+    }
+    EMGarray2[0] = HP_abs_EMGdata2;
+    
+    double sum2;
+    
+    for(int j2=0; j2<50; j2++)
+    {
+        sum2 += EMGarray2[j2];
+        
+    }
+    
+    double EMG_filt_2 = sum2 / (double) P2;
+    
+    return(EMG_filt_2);
 }
 
 void EMG_filtering ()
 {      
     ReadEMG();
-    scope.set(0, EMGdata);
+    scope.set(0, EMGdata1);
+    scope.set(1, EMGdata2);
+    
+    double HP_abs_EMGdata1 =  EMG_HP1(EMGdata1);
+    double HP_abs_EMGdata2 =  EMG_HP2(EMGdata2);
+    
+    double EMG_filt1 = Moving_mean1(HP_abs_EMGdata1);
+    double EMG_filt2 = Moving_mean2(HP_abs_EMGdata2);
     
-    volatile double HP_abs_EMGdata =  EMG_HP(EMGdata);
-    volatile double EMG_filt = Moving_mean(HP_abs_EMGdata);
+    scope.set(2, EMG_filt1);
+    scope.set(3, EMG_filt2);
+    
+    count++;
     
-    scope.set(1, EMG_filt);
-    pc.printf("HP_abs_EMGdata = %lf \t EMG filt= %lf \n\r", HP_abs_EMGdata, EMG_filt);
+    if (count == 50)
+    {
+        pc.printf("EMG filt 1 = %lf \t EMG filt 2 = %lf \n\r", EMG_filt1, EMG_filt2);
+        count = 0;
+    }
 }
  
 int main()