Daniqe Kottelenberg / Mbed 2 deprecated oooo

Dependencies:   HIDScope MODSERIAL QEI biquadFilter mbed

Fork of emg_import by Daniqe Kottelenberg

Files at this revision

API Documentation at this revision

Comitter:
daniQQue
Date:
Tue Oct 25 14:29:09 2016 +0000
Parent:
22:eb8411807cca
Child:
24:bfc240e381b4
Commit message:
werkend op floor, switch erin gezet. Drie signalen in.

Changed in this revision

MODSERIAL.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	Tue Oct 25 14:29:09 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Sissors/code/MODSERIAL/#8ef4f91813fd
--- a/main.cpp	Tue Oct 25 13:40:55 2016 +0000
+++ b/main.cpp	Tue Oct 25 14:29:09 2016 +0000
@@ -2,24 +2,33 @@
 #include "mbed.h"
 #include "HIDScope.h"
 #include "BiQuad.h"  
+#include "MODSERIAL.h"
 
 //Define objects
 AnalogIn    emg_biceps_right_in( A0 );              //analog in to get EMG biceps  (r) in to c++
 AnalogIn    emg_triceps_right_in(A1);               //analog in to get EMG triceps (r) in to c++
-//AnalogIn    emg_biceps_left_in  (A2);               //analog in to get EMG biceps  (l) in to c++
+AnalogIn    emg_biceps_left_in  (A2);               //analog in to get EMG biceps  (l) in to c++
 Ticker      sample_timer;           //ticker
-HIDScope    scope(6);              //open 3 channels in hidscope
-DigitalOut richting_motor1(D4);     //motor1 direction output    
-PwmOut pwm_motor1(D5);              //motor1 velocity  output
+Ticker      switch_function;         //ticker
+HIDScope    scope(5);               //open 3 channels in hidscope
+MODSERIAL pc(USBTX, USBRX);            //pc connection
+
+//motors
+DigitalOut richting_motor1(D4);
+PwmOut pwm_motor1(D5);
+DigitalOut richting_motor2(D7);
+PwmOut pwm_motor2(D6);
 DigitalOut  led(LED_GREEN);         //led included to check where code is
 
 //define variables
 //other
 int    onoffsignal_rightarm=0;              // on/off signal: 1; biceps activation, 0: nothing, -1, triceps activation
+int    switch_signal_leftarm=0;             // switching between motors. 
 double cut_off_value_biceps =0.06;              //gespecificeerd door floortje
 double cut_off_value_triceps=-0.03;             //gespecificeerd door floortje
 double signal_right_arm;
-
+int n = 0; //start van de teller wordt op nul gesteld
+ 
 //biceps  arm 1, right arm
 double emg_biceps_right;
 double emg_filtered_high_biceps_right;
@@ -36,19 +45,46 @@
 double emg_filtered_high_notch_1_triceps_right;
 double emg_filtered_high_notch_1_2_triceps_right;
 
+//biceps  arm 1, left arm
+double emg_biceps_left;
+double emg_filtered_high_biceps_left;
+double emg_abs_biceps_left;
+double emg_filtered_biceps_left;
+double emg_filtered_high_notch_1_biceps_left;
+double emg_filtered_high_notch_1_2_biceps_left;
+
 //before abs filtering
+
+//b1 = biceps right arm
 BiQuad filterhigh_b1(9.5654e-01,-1.9131e+00,9.5654e-01,-1.9112e+00,9.1498e-01);
 BiQuad filternotch1_b1 (9.9115e-01, -1.8853e+00, 9.9115e-01 ,-1.8909e+00  , 9.9103e-01);
 BiQuad filternotch2_b1(1.0000e+00, -1.9022e+00, 1.0000e+00,  -1.8965e+00 , 9.9127e-01);
+
+//t1= triceps right arm
 BiQuad filterhigh_t1(9.5654e-01,-1.9131e+00,9.5654e-01,-1.9112e+00,9.1498e-01);
 BiQuad filternotch1_t1 (9.9115e-01, -1.8853e+00, 9.9115e-01 ,-1.8909e+00  , 9.9103e-01);
 BiQuad filternotch2_t1(1.0000e+00, -1.9022e+00, 1.0000e+00,  -1.8965e+00 , 9.9127e-01);
 
+//b2= biceps left arm
+BiQuad filterhigh_b2(9.5654e-01,-1.9131e+00,9.5654e-01,-1.9112e+00,9.1498e-01);
+BiQuad filternotch1_b2 (9.9115e-01, -1.8853e+00, 9.9115e-01 ,-1.8909e+00  , 9.9103e-01);
+BiQuad filternotch2_b2(1.0000e+00, -1.9022e+00, 1.0000e+00,  -1.8965e+00 , 9.9127e-01);
+
 //after abs filtering
 BiQuad filterlow_b1 (6.2942e-06, 1.2588e-05,6.2942e-06,-1.9929e+00,9.9292e-01);
 BiQuad filterlow_t1 (6.2942e-06, 1.2588e-05,6.2942e-06,-1.9929e+00,9.9292e-01);
+BiQuad filterlow_b2 (6.2942e-06, 1.2588e-05,6.2942e-06,-1.9929e+00,9.9292e-01);
 
+//function teller
+void SwitchN() {                        // maakt simpele functie die 1 bij n optelt
+    if(switch_signal_leftarm==1)
+    {
+        n++;
+    }    
+    }
+    
 //functions which are called in ticker to sample the analog signal
+
 void filter(){
         //biceps right arm read+filtering
         emg_biceps_right=emg_biceps_right_in.read();                            //read the emg value from the elektrodes
@@ -66,10 +102,18 @@
         emg_abs_triceps_right=fabs(emg_filtered_high_notch_1_2_triceps_right); //fabs because float
         emg_filtered_triceps_right=filterlow_t1.step(emg_abs_triceps_right);
         
+        //biceps left arm read+filtering
+        emg_biceps_left=emg_biceps_left_in.read();                            //read the emg value from the elektrodes
+        emg_filtered_high_biceps_left= filterhigh_b2.step(emg_biceps_left);
+        emg_filtered_high_notch_1_biceps_left=filternotch1_b2.step(emg_filtered_high_biceps_left);
+        emg_filtered_high_notch_1_2_biceps_left=filternotch2_b2.step(emg_filtered_high_notch_1_biceps_left);
+        emg_abs_biceps_left=fabs(emg_filtered_high_notch_1_2_biceps_left); //fabs because float
+        emg_filtered_biceps_left=filterlow_b2.step(emg_abs_biceps_left);
+          
         //signal substraction of filter biceps and triceps. Biceps +,triceps -
         signal_right_arm=emg_filtered_biceps_right-emg_filtered_triceps_right;
                
-        //creating of on/off signal with the created on/off signals, with if statement      
+        //creating of on/off signal with the created on/off signals, with if statement   for right arm!    
         if (signal_right_arm>cut_off_value_biceps)
         {onoffsignal_rightarm=1;}
           
@@ -81,13 +125,25 @@
         else
         {onoffsignal_rightarm=0;}
                       
+        //creating on/off signal for switch (left arm)
+        
+        if (emg_filtered_biceps_left>cut_off_value_biceps)
+        {
+        switch_signal_leftarm=1;    
+        }    
+        
+        else
+        {
+        switch_signal_leftarm=0;              
+        }
+        
         //send signals  to scope
         scope.set(0, emg_filtered_biceps_right);            //set emg signal to scope in channel 0
         scope.set(1, emg_filtered_triceps_right);           // set emg signal to scope in channel 1
-        scope.set(2, signal_right_arm);                     // set emg signal to scope in channel 2
+        scope.set(2, emg_filtered_biceps_left);                     // set emg signal to scope in channel 2
         scope.set(3, onoffsignal_rightarm);                          // set emg signal to scope in channel 3
-        scope.set(4, emg_biceps_right);
-        scope.set(5, emg_triceps_right);
+        scope.set(4, switch_signal_leftarm);
+        
         scope.send();                       //send all the signals to the scope
                 }
 
@@ -95,31 +151,59 @@
 
 int main()
 {  
+pc.baud(115200);
 sample_timer.attach(&filter, 0.001);        //continously execute the EMG reader and filter, it ensures that filter and sampling is executed every 1/frequency seconds
-
+switch_function.attach(&SwitchN,0.001);
 //endless loop
 
-    while(1) 
-    {    
-        if (onoffsignal_rightarm==1)
-        {
-        richting_motor1 = -1;    //motordirection (ccw)
-        pwm_motor1 = 1;         //motorspeed 1  
-        
-        }
-        else if(onoffsignal_rightarm==-1)
-        {
-        richting_motor1 = 1;    //motordirection (cw)
-        pwm_motor1 = 1;         //motorspeed 1       
-         }
-        
-        else if(onoffsignal_rightarm==0)
-        {
-        richting_motor1 = -1;    //motordirection (ccw)
-        pwm_motor1 = 0;         //motorspeed 0   
-    
-        }
-            
-    } 
+    while (true) {                        // zorgt er voor dat de code oneindig doorgelopen wordt  
+       
+    if (onoffsignal_rightarm==-1)                           // als s ingedrukt wordt gebeurd het volgende
+    {
+         if (n%2==0)                     // als s ingedrukt wordt en het getal is even gebeurd het onderstaande
+         {
+           pc.printf("n is even \n\r"); // print lijn "n is even"
+           pc.printf("up \n\r");        // print lijn "up"   
+           richting_motor1 = 1;
+           pwm_motor1 = 1; 
+                  
+         } 
+         
+         else                           // als s is ingedrukt maar het getal is niet even (dus oneven) gebeurdt het onderstaande
+         {
+           pc.printf("n is odd \n\r");  // print lijn "n is odd"
+           pc.printf("left \n\r");      // print lijn "left"
+           richting_motor2 = 1;
+           pwm_motor2 = 1;
+           
+         }      
+              
+    }
+    else if (onoffsignal_rightarm==1)                     // als d ingedrukt wordt gebeurd het volgende
+    {
+         if (n%2==0)                     // als d is ingedrukt en n is even dan gebeurd het volgende
+         {
+           pc.printf("n is even \n\r"); // print lijn "n is even"
+           pc.printf("down \n\r");      // print lijn "down"   
+           richting_motor1 = -1;
+           pwm_motor1 = 1;
+           
+        } 
+         else                           // als d is ingedrukt maar het getal is niet even (dus oneven) gebeurdt het onderstaande
+         {
+           pc.printf("n is odd \n\r"); // print lijn "n is odd"
+           pc.printf("right \n\r");    // print lijn "right"
+           richting_motor2 = -1;
+           pwm_motor2 = 1;
+                
+         }  
+    }   
+    else{
+       pc.printf("motor staat stil \n\r");
+    pwm_motor2=0;
+    pwm_motor1=0;
+       }              
+               
+}
         
 }
\ No newline at end of file