Matthew Maat / Mbed 2 deprecated EMG-RMS

Dependencies:   mbed HIDScope

Revision:
21:4183ea24a735
Parent:
20:97059009a491
--- a/main.cpp	Thu Sep 22 08:53:50 2016 +0000
+++ b/main.cpp	Fri Oct 11 11:59:59 2019 +0000
@@ -1,5 +1,6 @@
 #include "mbed.h"
 #include "HIDScope.h"
+#include <math.h>
 
 //Define objects
 AnalogIn    emg0( A0 );
@@ -14,9 +15,23 @@
  **/
 void sample()
 {
+    static int count=0;
+    static float RMS_value=0;
+    static float HighPass_value=0;
+    count+=1;
+    static float RMS[150];
+    static float HighPass[30];
+    float I1;
+    float If;
+    I1=emg0.read(); //read signal
+    HighPass_value+=(I1-HighPass[count%30])/30.0;
+    HighPass[count%30]=I1;
+    If=pow(I1-HighPass_value,2.0f); // Highpass-filtered value squared
+    RMS_value+=(If-RMS[count%150])/150.0;
+    RMS[count%150]=If;
     /* 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, emg0.read() );
-    scope.set(1, emg1.read() );
+    scope.set(0, sqrt(RMS_value) ); // send root mean squared
+    scope.set(1, emg0.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 */