Switches 2.0

Dependencies:   mbed QEI HIDScope BiQuad4th_order biquadFilter MODSERIAL FastPWM

Files at this revision

API Documentation at this revision

Comitter:
sanou8
Date:
Tue Nov 05 13:23:20 2019 +0000
Parent:
9:0e838367ab6a
Commit message:
Met mijn commentaar erbij

Changed in this revision

Filter/FilterDesign.cpp 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
diff -r 0e838367ab6a -r cbcb35182ef1 Filter/FilterDesign.cpp
--- a/Filter/FilterDesign.cpp	Fri Nov 01 10:23:02 2019 +0000
+++ b/Filter/FilterDesign.cpp	Tue Nov 05 13:23:20 2019 +0000
@@ -4,12 +4,7 @@
 
 
 
-// Notch filter on 50 Hz
-double nb0 = 0.999103206817809;
-double nb1 = -1.994263409725146;
-double nb2 = 0.999103206817809;
-double na1 = -1.994263409725146;
-double na2 = 0.998206413635618;
+
 
 // 4th order Butterworth High pass 9 Hz
 double hpb0 = 0.862550850547179;
@@ -42,8 +37,7 @@
 
 double FilterDesign(double u)
 {   
-    double y_n = notch50.step(u);       // First the notchfilter
-    double y_hp = highpass.step(y_n);   // Secondly the highpassfilter
+    double y_hp = highpass.step(y_n);   // First the highpassfilter
     double y_abs = abs(y_hp);           // Make the signal values absolute
     double y_lp = lowpass.step(y_abs);  // Then a lowpass filter
     double y_gain = y_lp*gain;          // Multiply by a gain
diff -r 0e838367ab6a -r cbcb35182ef1 main.cpp
--- a/main.cpp	Fri Nov 01 10:23:02 2019 +0000
+++ b/main.cpp	Tue Nov 05 13:23:20 2019 +0000
@@ -85,10 +85,10 @@
 
 Ticker ticker_calibration;   // Ticker to send the EMG signals to screen
 
-volatile double emg1_cal = 0.8;
+volatile double emg1_cal = 0.8;      // Initial value of the calibrated first emg
 volatile double emg1_filtered;      //measured value of the first emg
 volatile double emg2_filtered;      //measured value of the second emg
-volatile double emg2_cal = 0.8;
+volatile double emg2_cal = 0.8;     // Initial value of the calibrated second emg
 
 double speedy = 3;
 double speedx = 3;
@@ -249,20 +249,19 @@
 
 void EMGcalibration()
 {
-    Timer tijd;
-    tijd.start(); 
-    ticker_calibration.attach(&sample, 0.002);  
+    Timer tijd;                                 // Timer for the duration of the calibration stage
+    tijd.start();                               // Start of the timer
+    ticker_calibration.attach(&sample, 0.002);  // Ticker for reading EMG-signals is attached to the function that filters the emg-signals
     do {
-        //ticker_calibration.attach(&sample, 0.002);
-        if(emg1_cal < emg1_filtered) {
-            emg1_cal = emg1_filtered ;
-            pc.printf("EMG_cal : %g \n\r",emg1_cal);
+        if(emg1_cal < emg1_filtered) {                  // Initial calibration value is compaired to the current EMG value.
+            emg1_cal = emg1_filtered ;                  // When the current EMG value is higher than the calibration value, then the calibration 
+            pc.printf("EMG_cal : %g \n\r",emg1_cal);    // value becomes the current EMG value.
         }
-        if(emg2_cal < emg2_filtered) {
+        if(emg2_cal < emg2_filtered) {                  // The same is true for the second EMG signal
             emg2_cal = emg2_filtered ;
         }
         pc.printf("emg1: %f\n\r", emg1_filtered);
-    } while(tijd.read()<10);
+    } while(tijd.read()<10);                            // After ten seconds the calibration of the EMG-signals stop
 }
 
 
@@ -280,15 +279,15 @@
 
 void moveWithEMG()
 {
-    if(emg1_filtered >= 0.5*emg1_cal) {
-        speedy = 3;
+    if(emg1_filtered >= 0.5*emg1_cal) {                     // When the current value of EMG1 is higher than half of the calibration value,
+        speedy = 3;                                         // the speed in Y direction becomes 3. Otherwise the speed stays 0.
         pc.printf("emg1: %f", emg1_filtered);
     } else {
         speedy = 0;
     }
 
-    if(emg2_filtered >= 0.5*emg2_cal) {
-        speedx = 3;
+    if(emg2_filtered >= 0.5*emg2_cal) {                     // When the current value of EMG2 is higher than half of the calibration value,
+        speedx = 3;                                         // the speed in X direction becomes 3. Otherwise the speed stays 0.
         pc.printf("emg1: %f\n\r", emg2_filtered);
     } else {
         speedx = 0;
@@ -444,18 +443,14 @@
 
 void sample()
 {
-    emg1_filtered = FilterDesign(emg0.read());
-    emg2_filtered = FilterDesign(emg1.read());
+    emg1_filtered = FilterDesign(emg0.read());                  // The first emg signal is put in the filter and the filtered values are saved
+    emg2_filtered = FilterDesign(emg1.read());                  // The second emg signal is put in the filter and the filtered values are saved
+    
     /* Set the sampled emg values in channel 0 (the first channel) and 1 (the second channel) in the 'HIDScope' instance named 'scope' */
     scope.set(0, emg1_filtered ) ;
     scope.set(1, emg2_filtered );
-    /* Repeat the step above if required for more channels of required (channel 0 up to 5 = 6 channels)
-    *  Ensure that enough channels are available (HIDScope scope( 2 ))
-    *  Finally, send all channels to the PC at once */
-    scope.send();
-    /* To indicate that the function is working, the LED is toggled */
-    //pc.printf("%f", emg1_filtered)
-    //led = !led;
+    
+    scope.send();                   // Finally, the values are send and can be used in other functions.
 }
 
 void moveWithSpeed(double *xStart, double *yStart, double xSpeed, double ySpeed)