Combination code of movement and emg code with small changes for 2 motors.

Dependencies:   HIDScope MODSERIAL QEI biquadFilter mbed

Fork of EMG_converter_code by Gerlinde van de Haar

Files at this revision

API Documentation at this revision

Comitter:
Technical_Muffin
Date:
Wed Oct 28 13:14:16 2015 +0000
Parent:
11:8196434745b4
Commit message:
Working emg movement code. Apparently biquads need to be doubled and at seperate locations

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 8196434745b4 -r 86b3885a6308 main.cpp
--- a/main.cpp	Wed Oct 28 11:46:55 2015 +0000
+++ b/main.cpp	Wed Oct 28 13:14:16 2015 +0000
@@ -11,7 +11,7 @@
 Ticker      motor_timer1;
 Ticker      motor_timer2;
 Ticker      cal_timer;
-HIDScope    scope(4);        // Instantize a 2-channel HIDScope object
+HIDScope    scope(5);        // Instantize a 2-channel HIDScope object
 DigitalIn button1(PTA4);//test button for starting motor 1
 DigitalOut led1(LED_RED);
 DigitalOut led2(LED_BLUE);
@@ -29,7 +29,13 @@
 biquadFilter filterhigh1(-1.4542, 0.5741, 0.7571, -1.5142, 0.7571);
 biquadFilter filterlow1(0.4395, 0.2059, 0.4114, 0.8227, 0.4114);
 biquadFilter notch(-1.0958, 0.9723, 0.9862, -1.0958, 0.9862);
-biquadFilter filterlow2(-1.4542, 0.5741, 0.0300, 0.0599, 0.0300);
+biquadFilter filterlow2(-1.9722, 0.9726, 9.50600294492288e-05, 0.000190120058898458, 9.50600294492288e-05);
+
+biquadFilter filterhigh12(-1.4542, 0.5741, 0.7571, -1.5142, 0.7571);
+biquadFilter filterlow12(0.4395, 0.2059, 0.4114, 0.8227, 0.4114);
+biquadFilter notch2(-1.0958, 0.9723, 0.9862, -1.0958, 0.9862);
+biquadFilter filterlow22(-1.9722, 0.9726, 9.50600294492288e-05, 0.000190120058898458, 9.50600294492288e-05);
+
 double emg_value1;
 double signalpart11;
 double signalpart12;
@@ -46,6 +52,8 @@
 double signalfinal2;
 double onoffsignal2;
 
+double test;
+
 
 double maxcal=1;        
 bool calyes=1;
@@ -72,46 +80,51 @@
         emg_value1 = emg1.read();//read the emg value from the elektrodes
         signalpart11 = notch.step(emg_value1);//Highpass filter for removing offset and artifacts
         signalpart12 = filterhigh1.step(signalpart11);//rectify the filtered signal
-        signalpart13 = abs(signalpart12);//low pass filter to envelope the emg
+        signalpart13 = fabs(signalpart12);//low pass filter to envelope the emg
         signalpart14 = filterlow1.step(signalpart13);//notch filter to remove 50Hz signal
         signalfinal1 = filterlow2.step(signalpart14);//2nd low pass filter to envelope the emg
         onoffsignal1=signalfinal1/maxcal;//divide the emg signal by the max EMG to calibrate the signal per person
         //pc.printf("the emg 1 signal is: %f \n",onoffsignal1); 
-        emg_value2 = emg2.read();//read the emg value from the elektrodes
+        /*emg_value2 = emg2.read();//read the emg value from the elektrodes
         signalpart21 = notch.step(emg_value2);//Highpass filter for removing offset and artifacts
         signalpart22 = filterhigh1.step(signalpart21);//rectify the filtered signal
         signalpart23 = abs(signalpart22);//low pass filter to envelope the emg
         signalpart24 = filterlow1.step(signalpart23);//notch filter to remove 50Hz signal
         signalfinal2 = filterlow2.step(signalpart24);//2nd low pass filter to envelope the emg
-        onoffsignal2=signalfinal2/maxcal;//divide the emg signal by the max EMG to calibrate the signal per person
-        
+        onoffsignal2=signalfinal2/maxcal;*///divide the emg signal by the max EMG to calibrate the signal per person
+        //test=onoffsignal2-onoffsignal1;
         scope.set(0,emg_value1);//set emg signal to scope in channel 1
         scope.set(1,onoffsignal1);//set filtered signal to scope in channel 2
-        scope.set(2,emg_value2);//set emg signal to scope in channel 1
-        scope.set(3,onoffsignal2);//set filtered signal to scope in channel 2
-        scope.send();//send the signals to the scope
-        //pc.printf("the emg 2 signal is: %f \n",onoffsignal2); 
+        //scope.set(2,emg_value2);//set emg signal to scope in channel 3
+        //scope.set(3,onoffsignal2);//set filtered signal to scope in channel 4
+        //scope.set(4,test);
+        //scope.send();//send the signals to the scope
+
+        //pc.printf("the difference between the 2 signals is: %f \n",test); 
 
         //pc.printf("emg signal %f, filtered signal %f \n",emg_value,onoffsignal);
 }
 }
-/*
+
+
 void filter2(){
         if(calyes==1){
         emg_value2 = emg2.read();//read the emg value from the elektrodes
-        signalpart21 = notch.step(emg_value2);//Highpass filter for removing offset and artifacts
-        signalpart22 = filterhigh1.step(signalpart21);//rectify the filtered signal
-        signalpart23 = abs(signalpart22);//low pass filter to envelope the emg
-        signalpart24 = filterlow1.step(signalpart23);//notch filter to remove 50Hz signal
-        signalfinal2 = filterlow2.step(signalpart24);//2nd low pass filter to envelope the emg
+        signalpart21 = notch2.step(emg_value2);//Highpass filter for removing offset and artifacts
+        signalpart22 = filterhigh12.step(signalpart21);//rectify the filtered signal
+        signalpart23 = fabs(signalpart22);//low pass filter to envelope the emg
+        signalpart24 = filterlow12.step(signalpart23);//notch filter to remove 50Hz signal
+        signalfinal2 = filterlow22.step(signalpart24);//2nd low pass filter to envelope the emg
         onoffsignal2=signalfinal2/maxcal;//divide the emg signal by the max EMG to calibrate the signal per person
         scope.set(2,emg_value2);//set emg signal to scope in channel 1
         scope.set(3,onoffsignal2);//set filtered signal to scope in channel 2
-        pc.printf("the emg 2 signal is: %f \n",onoffsignal2); 
-    scope.send();//send the signals to the scope
+        //pc.printf("the emg 2 signal is: %f \n",onoffsignal2); 
+        scope.send();//send the signals to the scope
         //pc.printf("emg signal %f, filtered signal %f \n",emg_value,onoffsignal);
 }
-}*/
+}
+
+
 
 /*
 void checkmotor1(){//check the normalized signal and set actions if a threshold is passed not needed in ticker move to main function
@@ -193,7 +206,7 @@
     speed1.write(0);
     speed2.write(0);
         sample_timer1.attach(filter1, 0.003125);//continously execute the EMG reader and filter
-//        sample_timer2.attach(&filter2, 0.005);//continously execute the EMG reader and filter
+        sample_timer2.attach(filter2, 0.003125);//continously execute the EMG reader and filter
         //motor_timer1.attach(&checkmotor1, 0.002);//continously execute the motor controller
         //motor_timer2.attach(&checkmotor2, 0.002);//continously execute the motor controller
       //  cal_timer.attach(&calibri, 0.002);//ticker to check if motor is being calibrated