Mahandra Raditya / Mbed 2 deprecated AltEMGCallibration

Dependencies:   HIDScope biquadFilter mbed

Files at this revision

API Documentation at this revision

Comitter:
Sunastra
Date:
Thu Nov 02 17:42:27 2017 +0000
Commit message:
AltEMGCalb

Changed in this revision

HIDScope.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
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 2c9afa8a21ee HIDScope.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HIDScope.lib	Thu Nov 02 17:42:27 2017 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/tomlankhorst/code/HIDScope/#d23c6edecc49
diff -r 000000000000 -r 2c9afa8a21ee biquadFilter.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/biquadFilter.lib	Thu Nov 02 17:42:27 2017 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/tomlankhorst/code/biquadFilter/#26861979d305
diff -r 000000000000 -r 2c9afa8a21ee main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Nov 02 17:42:27 2017 +0000
@@ -0,0 +1,206 @@
+#include "mbed.h"
+#include "HIDScope.h"
+#include "BiQuad.h"
+#include "TextLCD.h"
+
+
+HIDScope scope(5);
+Ticker HidTicker;
+
+AnalogIn bicepsEMG(A0);
+AnalogIn tricepsEMG(A1);
+AnalogIn carpiFlexEMG(A2);
+AnalogIn palmarisEMG(A3);
+
+double tickerF =0.002;
+double bicepsMOVAG [20];
+double tricepsMOVAG [20];
+double carpiFlexMOVAG [20];
+double palmarisMOVAG [20];
+int MOVAGLength=20;
+
+//Notch Filter 50Hz Q of 0.7
+
+double bicepsNotcha0 = 0.7063988100714527;
+double bicepsNotcha1 = -1.1429772843080923;
+double bicepsNotcha2 = 0.7063988100714527;
+double bicepsNotchb1 = -1.1429772843080923;
+double bicepsNotchb2 = 0.41279762014290533;
+
+double tricepsNotcha0 = 0.7063988100714527;
+double tricepsNotcha1 = -1.1429772843080923;
+double tricepsNotcha2 = 0.7063988100714527;
+double tricepsNotchb1 = -1.1429772843080923;
+double tricepsNotchb2 = 0.41279762014290533;
+
+double carpiFlexNotcha0 = 0.7063988100714527;
+double carpiFlexNotcha1 = -1.1429772843080923;
+double carpiFlexNotcha2 = 0.7063988100714527;
+double carpiFlexNotchb1 = -1.1429772843080923;
+double carpiFlexNotchb2 = 0.41279762014290533;
+
+double palmarisNotcha0 = 0.7063988100714527;
+double palmarisNotcha1 = -1.1429772843080923;
+double palmarisNotcha2 = 0.7063988100714527;
+double palmarisNotchb1 = -1.1429772843080923;
+double palmarisNotchb2 = 0.41279762014290533;
+
+//Highpass filters 20Hz cutoff Q of 0.7
+double bicepsHigha0 = 0.8370879899975344;
+double bicepsHigha1 = -1.6741759799950688;
+double bicepsHigha2 = 0.8370879899975344;
+double bicepsHighb1 = -1.6474576182593796;
+double bicepsHighb2 = 0.7008943417307579;
+
+double tricepsHigha0 = 0.8370879899975344;
+double tricepsHigha1 = -1.6741759799950688;
+double tricepsHigha2 = 0.8370879899975344;
+double tricepsHighb1 = -1.6474576182593796;
+double tricepsHighb2 = 0.7008943417307579;
+
+double carpiFlexHigha0 = 0.8370879899975344;
+double carpiFlexHigha1 = -1.6741759799950688;
+double carpiFlexHigha2 = 0.8370879899975344;
+double carpiFlexHighb1 = -1.6474576182593796;
+double carpiFlexHighb2 = 0.7008943417307579;
+
+double palmarisHigha0 = 0.8370879899975344;
+double palmarisHigha1 = -1.6741759799950688;
+double palmarisHigha2 = 0.8370879899975344;
+double palmarisHighb1 = -1.6474576182593796;
+double palmarisHighb2 = 0.7008943417307579;
+
+
+
+BiQuad bicepsNotch (bicepsNotcha0,bicepsNotcha1,bicepsNotcha2,bicepsNotchb1,bicepsNotchb2);
+BiQuad tricepsNotch (tricepsNotcha0,tricepsNotcha1,tricepsNotcha2,tricepsNotchb1,tricepsNotchb2);
+BiQuad carpiFlexNotch (carpiFlexNotcha0,carpiFlexNotcha1,carpiFlexNotcha2,carpiFlexNotchb1,carpiFlexNotchb2);
+BiQuad palmarisNotch (palmarisNotcha0,palmarisNotcha1,palmarisNotcha2, palmarisNotchb1,palmarisNotchb2);
+
+BiQuad bicepsHigh (bicepsHigha0,bicepsHigha1,bicepsHigha2,bicepsHighb1,bicepsHighb2);
+BiQuad tricepsHigh (tricepsHigha0,tricepsHigha1,tricepsHigha2,tricepsHighb1,tricepsHighb2);
+BiQuad carpiFlexHigh (carpiFlexHigha0,carpiFlexHigha1,carpiFlexHigha2,carpiFlexHighb1,carpiFlexHighb2);
+BiQuad palmarisHigh (palmarisHigha0,palmarisHigha1,palmarisHigha2, palmarisHighb1,palmarisHighb2);
+
+//set your pins here: motor1_pwm and motor1_dir, etc.
+//reserve variables for the motor positions (in rad) etc.
+
+
+Ticker main_loop; //ticker that will handle the main behavior
+enum States {calib1, calib2, homing, emgcontrol, demo}; //calib1=0, calib2=1, ..., demo=4
+TextLCD lcd(D8, D9, D4, D5, D6, D7); // rs, e, d4-d7
+int state, counter;
+bool position_controller_on;
+float looptime = 0.001f;
+Timer flex;
+Timer prep;
+
+void filter(){
+  
+        
+    double bicepsSignal = bicepsEMG.read();
+    double bicepsFiltered = bicepsSignal;    
+    double tricepsSignal = tricepsEMG.read();
+    double tricepsFiltered = tricepsSignal;
+    double carpiFlexSignal = carpiFlexEMG.read();
+    double carpiFlexFiltered = carpiFlexSignal;
+    double palmarisSignal = palmarisEMG.read();
+    double palmarisFiltered = palmarisSignal;
+
+    //Filter out 50Hz from all signals
+    bicepsFiltered = bicepsNotch.step(bicepsFiltered);
+    tricepsFiltered = tricepsNotch.step(tricepsFiltered);
+    carpiFlexFiltered = carpiFlexNotch.step(carpiFlexFiltered);
+    palmarisFiltered = palmarisNotch.step(palmarisFiltered);
+    
+    //Highpass filtering
+    bicepsFiltered = bicepsHigh.step(bicepsFiltered);
+    tricepsFiltered = tricepsHigh.step(tricepsFiltered);
+    carpiFlexFiltered = carpiFlexHigh.step(carpiFlexFiltered);
+    palmarisFiltered = palmarisHigh.step(palmarisFiltered);
+    
+    //Rectification 
+    bicepsFiltered = fabs(bicepsFiltered);
+    tricepsFiltered = fabs(tricepsFiltered);
+    carpiFlexFiltered = fabs(carpiFlexFiltered);
+    palmarisFiltered = fabs(palmarisFiltered);
+    
+    //caculate moving average
+    for(int i=0;i<MOVAGLength-1;i++){
+        bicepsMOVAG[i]=bicepsMOVAG[i+1];
+        tricepsMOVAG[i]=tricepsMOVAG[i+1];  
+        carpiFlexMOVAG[i]=carpiFlexMOVAG[i+1];  
+        palmarisMOVAG[i]=palmarisMOVAG[i+1];        
+    }
+                
+    bicepsMOVAG[MOVAGLength-1]=bicepsFiltered;
+    tricepsMOVAG[MOVAGLength-1]=tricepsFiltered;
+    carpiFlexMOVAG[MOVAGLength-1]=carpiFlexFiltered;
+    palmarisMOVAG[MOVAGLength-1]=palmarisFiltered;
+    
+    double bicepsSum;
+    double tricepsSum;
+    double carpiFlexSum;
+    double palmarisSum;    
+    
+    for(int i=0;i<MOVAGLength;i++){
+        bicepsSum+= bicepsMOVAG[i];
+        tricepsSum+= tricepsMOVAG[i];
+        carpiFlexSum+= carpiFlexMOVAG[i];
+        palmarisSum+= palmarisMOVAG[i];       
+    }
+        
+    double bicepsAvg= bicepsSum/MOVAGLength;
+    double tricepsAvg= tricepsSum/MOVAGLength;
+    double carpiFlexAvg= carpiFlexSum/MOVAGLength;
+    double palmarisAvg= palmarisSum/MOVAGLength;
+        
+   
+     scope.set(0,bicepsAvg);
+     scope.set(1,tricepsAvg);
+     scope.set(2,carpiFlexAvg);
+     scope.set(3,palmarisAvg);
+     scope.send();
+    }
+    
+int main()
+{
+    for(int i=0;i<MOVAGLength;i++){
+        bicepsMOVAG[i]=0;     
+        tricepsMOVAG[i]=0;
+        carpiFlexMOVAG[i]=0;
+        palmarisMOVAG[i]=0;
+    }
+    HidTicker.attach(filter,tickerF);
+    while (true) {
+                
+            if(Sensor.read_u16()>12000 && Sensor.read_u16()< 15000){
+               lcd.printf("Prepare /n to flex biceps");
+               prep.start();
+               while(prep.read() < 3){}
+               lcd.cls(); 
+               lcd.printf("Prepare to flex in %f seconds", 3);
+               wait(1);
+               lcd.printf("Prepare to flex in %f seconds", 2);
+               wait(1);
+               lcd.printf("Prepare to flex in %f seconds", 1);
+               wait(1);
+               lcd.printf("Flex!");
+               flex.start();
+               double bicepsMax=0;
+               while(flex.read()<1){
+                   if()
+                   
+                   }
+               lcd.cls(); 
+               lcd.printf(" * Stretch * ");
+               wait(4);
+               lcd.cls();                
+                } else {
+                lcd.printf("Press to start", Sensor.read_u16());
+                wait(1);        
+                lcd.cls();
+            }
+    }
+    
+}
\ No newline at end of file
diff -r 000000000000 -r 2c9afa8a21ee mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Nov 02 17:42:27 2017 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/fb8e0ae1cceb
\ No newline at end of file