Changes to Calculate class.
authorRikhard Kuutti <rikhard.kuutti@fudeco.com>
Wed, 3 Mar 2010 07:35:09 +0000 (09:35 +0200)
committerRikhard Kuutti <rikhard.kuutti@fudeco.com>
Wed, 3 Mar 2010 07:35:09 +0000 (09:35 +0200)
Added accelStoppedCheck function.

Client/calculate.cpp
Client/calculate.h

index 9fd6e8b..781f7f9 100644 (file)
@@ -126,13 +126,37 @@ void Calculate::CalculateParameters(double currentAcceleration, double seconds)
        */
     averageSpeed = (distanceTraveled / totalTime);
 
+    /* Check for movement
+           */
+    accelStoppedCheck(currentAcceleration);
+
     lastSpeed = currentSpeed;
     lastAcceleration = currentAcceleration;
     lastDistance = distanceTraveled;
 }
 
-
-
-
+/**
+  * This function checks if acceleration has stopped for
+  * a short period of time. Velocity is set to zero to avoid
+  * distance errors.
+  */
+void Calculate::accelStoppedCheck(double currentAcceleration) {
+
+    // counting number of acceleration samples that equals zero
+    if (currentAcceleration==0)
+    {
+        count++;
+    }
+    else
+    {
+        count = 0;
+    }
+
+    // if count exceeds 25, we assume that velocity is zero
+    if (count >= 25)
+    {
+        currentSpeed=0;
+    }
+}
 
 
index 0008a87..db86aed 100644 (file)
@@ -14,6 +14,7 @@ public:
 
     void reset();
     void CalculateParameters(double currentAcceleration, double seconds);
+    void accelStoppedCheck(double currentAcceleration);
 
     double AverageSpeed();
     void AverageSpeed(double value);
@@ -52,7 +53,7 @@ private:
     double lastSpeed;
     long numOfIterations;
     double totalTime;
-
+    int count;
 
 };