ksf

Dependents:   kinematics_controlv2 kinematics_controlv4 kinematics_control_copyfds Robot_control

Revision:
0:5f8dee4d4b09
Child:
1:15543c143a63
diff -r 000000000000 -r 5f8dee4d4b09 signalnumber.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/signalnumber.cpp	Mon Oct 30 10:41:44 2017 +0000
@@ -0,0 +1,163 @@
+#include "signalnumber.h"
+#include "mbed.h"
+
+
+//Constants for mean value
+const int n = 10;                   //Window size for the mean value
+float emg0_filtered[n] = {}; 
+int count = 0;
+int count2 = 0;
+//const float controller_TS = 0.1;
+float mean = 0.0;
+float sum = 0.0;
+
+
+//Constants EMG switch
+const float LeftFastmin=0.075;
+const float LeftFastmax=0.15;
+const float LeftSlowmin=0.2;
+const float LeftSlowmax=0.35;
+const float RightSlowmin=0.4;
+const float RightSlowmax=0.65;
+const float RightFastmin=0.7;
+const float RightFastmax=1.5;
+int Number = 0;
+//const int action =50;
+
+
+SignalNumber::SignalNumber(void)
+{
+
+}
+
+
+
+//Determine the sum of the last "n" amount of numbers.
+float SignalNumber::getsum(float array[], const int n){
+    float sum_math = 0.0;
+    for (int m=0 ; m<n ; m++ ){
+        sum_math = sum_math + array[m];
+    }
+    return sum_math;   
+}
+
+
+
+// Determine the mean value of the last "n" amount of numbers.
+float SignalNumber::getmean(const int n, float input){
+    emg0_filtered[count] = input;
+    count++;
+    if (count == n){
+        count = 0;
+    }
+    float mean_math = getsum(emg0_filtered,n)/n;
+    return mean_math;
+}
+
+
+float SignalNumber::calibrate(const int n, float input){
+    float offset = getmean(n, input);
+    return offset; 
+} 
+
+
+
+//Determine the right signal number
+/*
+There will be checked in which range the mean value lies. If the value lies 
+within this range for "action" samples the switch will be changed to the right
+mode. If the mean value changes outside of the region the switch will be set to 
+0, this is the resting state. Also the counter will be reset.
+*/
+int SignalNumber::getnumber(const int n, const int action, double input){
+    mean = getmean(n,input);
+    //Check first case
+    if( mean < LeftFastmin ) {
+        if (count2 <action){
+            mean = getmean(n, input);
+            if(mean < LeftFastmin){
+                count2++;
+            }
+            else{
+                count2=0;
+                Number=0;
+            } 
+        }
+        else{
+            Number = 0;
+            count2=0;
+        }
+    }
+     //Check second case  
+     else if(mean <= LeftFastmax and mean > LeftFastmin){
+        if (count2 <action){
+            mean = getmean(n,input);
+            if(mean <=LeftFastmax and mean>LeftFastmin){
+                count2++;
+            }
+            else{
+                count2=0;
+                Number=0;
+            } 
+        }
+        else{
+            Number = 1;
+            count2=0;
+        }
+    }
+     else if( mean <=LeftSlowmax and mean>LeftSlowmin) {
+        if (count2 <action){
+            mean = getmean(n,input);
+            if(mean <=LeftSlowmax and mean>LeftSlowmin){
+                count2++;
+            }
+            else{
+                count2=0;
+                Number=0;
+            } 
+        }
+        else{
+            Number = 2;
+            count2=0;
+        }
+     }
+     else if( mean <=RightSlowmax and mean>RightSlowmin) {
+        if (count2 <action){
+            mean = getmean(n,input);
+            if(mean <=RightSlowmax and mean>RightSlowmin){
+                count2++;
+            }
+            else{
+                count2=0;
+                Number=0;
+            } 
+        }
+        else{
+            Number = 3;
+            count2=0;
+        }
+     }
+     else if( mean <=RightFastmax and mean>RightFastmin ) {
+        if (count2 <action){
+            mean = getmean(n,input);
+            if(mean <=RightFastmax and mean>RightFastmin){
+                count2++;
+            }
+            else{
+                count2=0;
+                Number=0;
+            } 
+        }
+        else{
+            Number = 4;
+            count2=0;
+        }
+    }
+    else{
+        count2=0;
+        Number =0;
+    }
+    return Number;
+}       
+
+