Merge branch 'development/carmainwindow'
authorToni Jussila <toni.jussila@fudeco.com>
Fri, 5 Mar 2010 11:39:38 +0000 (13:39 +0200)
committerToni Jussila <toni.jussila@fudeco.com>
Fri, 5 Mar 2010 11:39:38 +0000 (13:39 +0200)
Client/accelerometer.cpp
Client/accelerometer.h

index b2fa1d5..1a36361 100644 (file)
@@ -67,27 +67,31 @@ void Accelerometer::start()
  */
 void Accelerometer::initValues()
 {
-    accelerationX=0;
-    accelerationY=0;
-    accelerationZ=0;
-    trueAccelerationX=0;
-    trueAccelerationY=0;
-    trueAccelerationZ=0;
-    previousAccelerationX=0;
-    previousAccelerationY=0;
-    previousAccelerationZ=0;
-    previousSpeed=0;
-    currentSpeed=0;
-    currentAcceleration=0;
-    previousAcceleration=0;
-    totalAcceleration=0;
-    intervalTime=0;
-    totalTime=0;
-    distanceTraveled=0;
-    lastDistanceTraveled=0;
-    averageSpeed=0;
-    sampleRate=0;
-    reverseAcceleration = false;
+    calculate->reset();
+    accelerationX = 0;
+    accelerationY = 0;
+    accelerationZ = 0;
+    trueAccelerationX = 0;
+    trueAccelerationY = 0;
+    trueAccelerationZ = 0;
+    previousAccelerationX = 0;
+    previousAccelerationY = 0;
+    previousAccelerationZ = 0;
+    previousSpeed = 0;
+    currentSpeed = 0;
+    currentAcceleration = 0;
+    previousAcceleration = 0;
+    totalAcceleration = 0;
+    intervalTime = 0;
+    totalTime = 0;
+    distanceTraveled = 0;
+    lastDistanceTraveled = 0;
+    averageSpeed = 0;
+    sampleRate = 0;
+    firstRun = true;
+    calibrationX = 0;
+    calibrationY = 0;
+    calibrationZ = 0;
 }
 
 /**
@@ -228,6 +232,21 @@ qreal Accelerometer::getTotalTime()
     return totalTime;
 }
 
+int Accelerometer::getCalibrationX()
+{
+    return calibrationX;
+}
+
+int Accelerometer::getCalibrationY()
+{
+    return calibrationY;
+}
+
+int Accelerometer::getCalibrationZ()
+{
+    return calibrationZ;
+}
+
 /**
  * Processes Accelerometer data
  *
@@ -238,7 +257,10 @@ qreal Accelerometer::getTotalTime()
 void Accelerometer::processData()
 {
     QFile file(kFileName);
-    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) return;
+    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
+    {
+        return;
+    }
 
     // Read data, parse with regular expressions and process it
     QByteArray line = file.readLine();
@@ -248,19 +270,34 @@ void Accelerometer::processData()
     smoothData(rx.cap(1).toInt(), rx.cap(2).toInt(), rx.cap(3).toInt());
 
     // Apply calibration
-    trueAccelerationX = accelerationX - calibrationX;
-    trueAccelerationY = accelerationY - calibrationY;
-    trueAccelerationZ = accelerationZ - calibrationZ;
+    accelerationX = accelerationX - calibrationX;
+    accelerationX = accelerationY - calibrationY;
+    accelerationX = accelerationZ - calibrationZ;
+
+    // If the function is run the first time, make sure that there
+    // are no differences with previous and current acceleration
+    if (firstRun) {
+        previousAccelerationX = accelerationX;
+        previousAccelerationY = accelerationY;
+        previousAccelerationZ = accelerationZ;
+        firstRun = false;
+    }
 
     // Discrimination window for acceleration values
-    if (trueAccelerationX <= 30 && trueAccelerationX >= -30) { trueAccelerationX = 0; }
-    if (trueAccelerationY <= 30 && trueAccelerationY >= -30) { trueAccelerationY = 0; }
-    if (trueAccelerationZ <= 30 && trueAccelerationZ >= -30) { trueAccelerationZ = 0; }
+    /*if ( fabs(accelerationX) < 20 ) { accelerationX = 0; }
+      if ( fabs(accelerationY) < 20 ) { accelerationY = 0; }
+      if ( fabs(accelerationZ) < 20 ) { accelerationZ = 0; }*/
 
+    // Calculate the current acceleration for each axis
     trueAccelerationX = (accelerationX - previousAccelerationX) /*/ 1000 * kGravity*/;
     trueAccelerationY = (accelerationY - previousAccelerationY) /*/ 1000 * kGravity*/;
     trueAccelerationZ = (accelerationZ - previousAccelerationZ) /*/ 1000 * kGravity*/;
 
+    // Discrimination window for acceleration values
+    if ( fabs(trueAccelerationX) < 20 ) { trueAccelerationX = 0; }
+    if ( fabs(trueAccelerationY) < 20 ) { trueAccelerationY = 0; }
+    if ( fabs(trueAccelerationZ) < 20 ) { trueAccelerationZ = 0; }
+
     previousAccelerationX = accelerationX;
     previousAccelerationY = accelerationY;
     previousAccelerationZ = accelerationZ;
@@ -269,19 +306,14 @@ void Accelerometer::processData()
                                trueAccelerationY * trueAccelerationY +
                                trueAccelerationZ * trueAccelerationZ );
 
-    totalAcceleration = currentAcceleration - previousAcceleration;
-    previousAcceleration = currentAcceleration;
+    // Discrimination window for currentAcceleration
+    if ( fabs(currentAcceleration) < 20 ) { currentAcceleration = 0; }
 
     // Measure time interval
-    intervalTime = now.restart(); // millisecs to secs
-    intervalTime = intervalTime/1000;
+    intervalTime = now.restart();
+    intervalTime = intervalTime/1000; // millisecs to secs
     totalTime = totalTime + intervalTime;
 
-    // Filter out acceleration caused by noise.
-    if (fabs(currentAcceleration) < 0.09) {
-        return;
-    }
-
     // Using calculate class to calculate velocity and distance etc.
     calculate->calculateParameters(currentAcceleration,intervalTime );
 
@@ -303,10 +335,12 @@ void Accelerometer::smoothData(qreal x, qreal y, qreal z)
     accelerationX = x;
     accelerationY = y;
     accelerationZ = z;
-    if(sampleIndex>0) {
+    if (sampleIndex > 0)
+    {
         accelerationX = previousAccelerationX + (accelerationX-previousAccelerationX) * kFilteringFactor;
         accelerationY = previousAccelerationY + (accelerationY-previousAccelerationY) * kFilteringFactor;
         accelerationZ = previousAccelerationZ + (accelerationZ-previousAccelerationZ) * kFilteringFactor;
     }
     sampleIndex++;
 }
+
index 31e5588..52990df 100644 (file)
@@ -40,9 +40,9 @@ public:
     qreal getTotalAcceleration();
     qreal getPreviousTotalAcceleration();
 
-    int calibrationX;
-    int calibrationY;
-    int calibrationZ;
+    int getCalibrationX();
+    int getCalibrationY();
+    int getCalibrationZ();
 
     qreal getIntervalTime();
     qreal getTotalTime();
@@ -60,6 +60,8 @@ private:
     qreal previousSpeed, currentSpeed;
     qreal currentAcceleration, previousAcceleration, totalAcceleration;
 
+    int calibrationX, calibrationY, calibrationZ;
+
     QTime now;
     QTimer *timer;
 
@@ -70,7 +72,8 @@ private:
     double averageSpeed;
     double sampleRate;
 
-    bool reverseAcceleration;
+    bool firstRun;
 };
 
 #endif // ACCELEROMETER_H
+