Deze werkt van de jongen

Dependencies:   Encoder HIDScope MODSERIAL biquadFilter mbed

Files at this revision

API Documentation at this revision

Comitter:
paulineoonk
Date:
Mon Oct 30 16:11:48 2017 +0000
Commit message:
..

Changed in this revision

Encoder.lib Show annotated file Show diff for this revision Revisions of this file
HIDScope.lib Show annotated file Show diff for this revision Revisions of this file
MODSERIAL.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 ae9240e8af8c Encoder.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Encoder.lib	Mon Oct 30 16:11:48 2017 +0000
@@ -0,0 +1,1 @@
+http://os.mbed.com/users/vsluiter/code/Encoder/#18b000b443af
diff -r 000000000000 -r ae9240e8af8c HIDScope.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HIDScope.lib	Mon Oct 30 16:11:48 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/tomlankhorst/code/HIDScope/#d23c6edecc49
diff -r 000000000000 -r ae9240e8af8c MODSERIAL.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MODSERIAL.lib	Mon Oct 30 16:11:48 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Sissors/code/MODSERIAL/#a3b2bc878529
diff -r 000000000000 -r ae9240e8af8c biquadFilter.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/biquadFilter.lib	Mon Oct 30 16:11:48 2017 +0000
@@ -0,0 +1,1 @@
+http://os.mbed.com/users/tomlankhorst/code/biquadFilter/#26861979d305
diff -r 000000000000 -r ae9240e8af8c main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Oct 30 16:11:48 2017 +0000
@@ -0,0 +1,94 @@
+#include "mbed.h"
+#include "HIDScope.h"
+#include "BiQuad.h"                       //require the HIDScope library
+#include "MODSERIAL.h"
+//Define objects
+AnalogIn    emg(A0);                            //analog of EMG input
+Ticker      sample_timer;
+Ticker      motor_timer;
+Ticker      cal_timer;
+HIDScope    scope(2);                           //instantize a 2-channel HIDScope object
+DigitalIn button1(PTA4);                        //test button for starting motor 1
+DigitalOut led1(LED_RED);
+DigitalOut led2(LED_BLUE);
+MODSERIAL pc(USBTX,USBRX);
+
+//The biquad filters required to transform the EMG signal into an usable signal
+BiQuad filterhigh1(-1.1430, 0.4128, 0.6389, -1.2779, 0.6389);
+BiQuad filterlow1(1.9556, 0.9565, 0.9780, 1.9561, 0.9780);
+BiQuad notch(-1.1978e-16, 0.9561, 0.9780, -1.1978e-16, 0.9780);
+BiQuad filterlow2(-1.9645, 0.9651, 1.5515e-4, 3.1030e-4, 1.5515e-4);
+double emg_value;
+double signalpart1;
+double signalpart2;
+double signalpart3;
+double signalpart4;
+double signalfinal;
+double onoffsignal;
+double maxcal=0;        
+bool calyes=0;
+Timer looptime;
+
+
+void filter(){                                      //filter function
+        looptime.start();
+        if(calyes==1){
+        emg_value = emg.read();                     //read the emg value from the elektrodes
+        signalpart1 = notch.step(emg_value);        //Highpass filter for removing offset and artifacts
+        signalpart2 = filterhigh1.step(signalpart1);//rectify the filtered signal
+        signalpart3 = abs(signalpart2);             //low pass filter to envelope the emg
+        signalpart4 = filterlow1.step(signalpart3); //notch filter to remove 50Hz signal
+        signalfinal = filterlow2.step(signalpart4); //2nd low pass filter to envelope the emg
+        onoffsignal=signalfinal/maxcal;             //divide the emg signal by the max EMG to calibrate the signal per person
+        scope.set(0,emg_value);                     //set emg signal to scope in channel 1
+        scope.set(1,onoffsignal);                   //set filtered signal to scope in channel 2
+    scope.send();                                   //send the signals to the scope
+        pc.printf("emg %f, filtered %f, loop %f \r\n",emg_value,onoffsignal, looptime.read());
+        looptime.reset();
+}
+}
+void checkmotor(){                                  //check the normalized signal and set actions if a threshold is passed
+    if(calyes==1){                                  //if signal passes threshold value, red light goes on
+    if(onoffsignal<=0.25){
+             led1.write(1);
+             led2.write(0);
+             }
+    else if(onoffsignal >= 0.5){                    //if signal does not pass threshold value, blue light goes on
+                 led1.write(0);
+                 led2.write(1);
+             }
+             }
+}
+
+void calibri(){                                             //calibration function
+    if(button1.read()==false){
+        for(int n =0; n<5000;n++){                          //read for 5000 samples as calibration
+            emg_value = emg.read();                         //read the emg value from the elektrodes
+            signalpart1 = notch.step(emg_value);            //Highpass filter for removing offset and artifacts
+            signalpart2 = filterhigh1.step(signalpart1);    //rectify the filtered signal
+            signalpart3 = abs(signalpart2);                 //low pass filter to envelope the emg
+            signalpart4 = filterlow1.step(signalpart3);     //notch filter to remove 50Hz signal
+            signalfinal = filterlow2.step(signalpart4);     //2nd low pass filter to envelope the emg
+            double signalmeasure = signalfinal;
+            if (signalmeasure > maxcal){                    //determine what the highest reachable emg signal is
+                maxcal = signalmeasure;
+                }
+            }
+        calyes=1;
+    }  
+    }
+int main()                                                  //main loop
+{
+    pc.baud(115200);                                        //value required for putty
+    led1.write(1);
+    led2.write(1);
+   
+        sample_timer.attach(&filter, 0.002);                //continously execute the EMG reader and filter
+        motor_timer.attach(&checkmotor, 0.002);             //continously execute the motor controller
+        cal_timer.attach(&calibri, 0.002);                  //ticker to check if motor is being calibrated
+        pc.printf("%d",signalfinal);
+
+while(1){
+ //while loop to keep system going                                                 
+}     
+}
\ No newline at end of file
diff -r 000000000000 -r ae9240e8af8c mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Oct 30 16:11:48 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/fb8e0ae1cceb
\ No newline at end of file