EMG filtering; highpass, notch, abs, moving average

Dependencies:   HIDScope MODSERIAL- mbed-dsp mbed

Files at this revision

API Documentation at this revision

Comitter:
Hooglugt
Date:
Tue Oct 07 10:13:12 2014 +0000
Parent:
31:d8eaf0ce8517
Child:
33:a78ec776dfd5
Commit message:
duidelijke beschrijvingen toegevoegd van wat er nog gedaan moet worden, vragen, opmerkingen, etc.

Changed in this revision

Project_main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Project_main.cpp	Mon Oct 06 13:27:01 2014 +0000
+++ b/Project_main.cpp	Tue Oct 07 10:13:12 2014 +0000
@@ -9,15 +9,15 @@
 AnalogIn    emg0(PTB1);         //Analog input biceps
 AnalogIn    emg1(PTB2);         //Analog input triceps
 
-PwmOut      emg_bifloat(PTD4);   //Float voor EMG-waarde biceps, VRAAG: waarom we hier een PwmOut voor gebruiken
+PwmOut      emg_bifloat(PTD4);   //Float voor EMG-waarde biceps, VRAAG: waarom we hier een PwmOut voor gebruiken - kunnen we geen float gebruiken?
 PwmOut      emg_trifloat(PTA4);  //Float voor EMG-waarde triceps
 
 PwmOut      red(LED_RED);
 PwmOut      green(LED_GREEN);
 PwmOut      blue(LED_BLUE);
 
-int         direction = 0;
-int         force = 0;
+int8_t         direction = 0; 
+int8_t         force = 0;
 
 Ticker log_timer;
 Ticker reset_timer;
@@ -47,7 +47,7 @@
     scope.send();
 }
 
-void resetlooper()
+void resetlooper() // VRAAG: wat gebeurt er wanneer en resetlooper en looper tegelijkertijd gecalled worden?!
 {
     if(emg_trifloat.read()>0.8 && direction != 0) { //dit is alleen mogelijk wanneer directionchoice is gemaakt
         direction = 0;
@@ -65,6 +65,8 @@
     log_timer.attach(looper, 0.001); // The looper() function will be called every 0.001 seconds (with the ticker object)
     reset_timer.attach(resetlooper, 0.1); //
 
+    /* EMG-singaal van biceps en triceps worden hier gefilterd*/
+
     goto directionchoice; // goes to first while(1) for the deciding the direction
 
     while(1) { //Loop keuze DIRECTION
@@ -133,6 +135,7 @@
                 red=0;
                 green=1;
                 blue=1;
+                //TE DOEN een if statement die controleert of direction 0 is (dus of triceps gereset is)
                 for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
                     if(emg_bifloat.read()>0.8) {                    // 0.8 klopt niet als grenswaarde. #nofilter
                         force = 1;
@@ -151,6 +154,7 @@
                 red =1;
                 green=0;
                 blue=1;
+                //TE DOEN een if statement die controleert of direction 0 is (dus of triceps gereset is)
                 for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
                     if(emg_bifloat.read()>0.8) {                    //0.8 klopt niet als grenswaarde. #nofilter
                         force = 2;
@@ -169,6 +173,7 @@
                 red=1;
                 green=1;
                 blue=0;
+                //TE DOEN een if statement die controleert of direction 0 is (dus of triceps gereset is)
                 for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
                     if(emg_bifloat.read()>0.8) {                    //0.8 klopt niet als grenswaarde. #nofilter
                         force = 3;
@@ -186,14 +191,9 @@
         }
     }
 choicesmade:
-
-    red = 0;
-    green = 0;
-    blue = 0;           // wit lampje
-
-    if(direction == 0 || force == 0) {
-        pc.printf("error");
-    }
+ 
+    /* Vanaf hier komt de aansturing van de motor (inclusief de controller)*/
+    
     if(direction == 1 && force == 1) {            // links zwak
         pc.printf("links zwak");
     }
@@ -221,4 +221,11 @@
     if(direction == 3 && force == 3) {            // rechts sterk
         pc.printf("rechts sterk");
     }
+    if(direction == 0 || force == 0) {            // wanneer de triceps in de korte tijd is aangespannen nadat beide keuzes zijn gemaakt 
+        pc.printf("error");
+    }
+    
+    red = 0;
+    green = 0;
+    blue = 0;           // wit lampje
 }
\ No newline at end of file