Acceleration counted also from y axel.
authorJukka Kurttila <jktla@suomi24.fi>
Thu, 20 May 2010 07:34:40 +0000 (10:34 +0300)
committerJukka Kurttila <jktla@suomi24.fi>
Thu, 20 May 2010 07:34:40 +0000 (10:34 +0300)
Client/accelerometer.cpp
Client/accelerometer.h
Client/accrealtimedialog.cpp
Client/accrealtimedialog.h
Client/speedfreak.pro

index 9bfd904..cba6a78 100644 (file)
@@ -3,11 +3,12 @@
  *
  * @author      Rikhard Kuutti <rikhard.kuutti@fudeco.com>
  * @author      Kai Rasilainen <kai.rasilainen@fudeco.com>
- * @author      Jukka Kurttila <jukka.kurttila@fudeco.com>
+ * @author      Jukka Kurttila <jktla@suomi24.fi>
  * @copyright   (c) 2010 Speed Freak team
  * @license     http://opensource.org/licenses/gpl-license.php GNU Public License
  */
 
+//#define FROM_FILE //Use this flag to read acceleration data from file, set also filename using fileReader->setFileName
 #include "accelerometer.h"
 
 #include <QDBusConnection>
@@ -25,6 +26,8 @@ Accelerometer::Accelerometer()
 {
     initValues();
     calibrateDialog = NULL;
+    //fileReader = new filereader();
+    //fileReader->setFileName("45.txt");
 }
 
 /**
@@ -35,6 +38,8 @@ Accelerometer::~Accelerometer()
 {
     if(calibrateDialog)
         delete calibrateDialog;
+    if(fileReader)
+        delete fileReader;
 }
 
 /**
@@ -49,6 +54,7 @@ void Accelerometer::initValues()
     calibrationX = 0;
     calibrationY = 0;
     calibrationZ = 0;
+    fileReader = NULL;
 }
 
 /**
@@ -66,6 +72,27 @@ void Accelerometer::calibrate(void)
     calibrateDialog->resetProgressValue();
     calibrateDialog->setMaxValue( kIterations + 1 );
 
+#ifdef FROM_FILE
+    unsigned int numberOfIterations = 50;
+    do {
+        calibrateDialog->setProgressValue(iteration);
+
+        fileReader->ReadLine(sampleX,sampleY,sampleZ);
+        //getAcceleration(sampleX, sampleY, sampleZ);
+
+        calibrationX += sampleX; // Accumulate Samples
+        calibrationY += sampleY; // for all axes.
+        calibrationZ += sampleZ;
+
+        iteration++;
+
+    } while(iteration < numberOfIterations);        // kIterations times
+
+    calibrationX = calibrationX/numberOfIterations;  // division by kIterations
+    calibrationY = calibrationY/numberOfIterations;
+    calibrationZ = calibrationZ/numberOfIterations;
+
+#else
     do {
         calibrateDialog->setProgressValue(iteration);
 
@@ -82,7 +109,7 @@ void Accelerometer::calibrate(void)
     calibrationX = calibrationX/kIterations;  // division by kIterations
     calibrationY = calibrationY/kIterations;
     calibrationZ = calibrationZ/kIterations;
-
+#endif
     calibrateDialog->close();
 }
 
@@ -113,6 +140,9 @@ void Accelerometer::smoothData(qreal &x, qreal &y, qreal &z)
  */
 void Accelerometer::getAcceleration(qreal &x, qreal &y, qreal &z)
 {
+#ifdef FROM_FILE
+    fileReader->ReadLine(x,y,z);
+#else
     QDBusConnection connection(QDBusConnection::systemBus());
     if (connection.isConnected()) {
         QDBusInterface interface("com.nokia.mce", "/com/nokia/icd", QString(), connection);
@@ -123,6 +153,7 @@ void Accelerometer::getAcceleration(qreal &x, qreal &y, qreal &z)
         y = static_cast<qreal>(reply.argumentAt<4>()) / 1000;
         z = static_cast<qreal>(reply.argumentAt<5>()) / 1000;
     }
+#endif
 }
 
 /**
index 53e9ca0..d246f6d 100644 (file)
@@ -13,6 +13,7 @@
 
 #include <QObject>
 
+#include "filereader.h"
 #include "calculate.h"
 #include "calibratedialog.h"
 
@@ -37,6 +38,9 @@ private:
     qreal calibrationX, calibrationY, calibrationZ;
 
     CalibrateDialog *calibrateDialog;
+
+    filereader* fileReader;
+
 };
 
 #endif // ACCELEROMETER_H
index fd5100f..4b46af1 100644 (file)
@@ -19,6 +19,7 @@ AccRealTimeDialog::AccRealTimeDialog(QWidget *parent) :
 
     accelerometer = new Accelerometer();
     movingAverageZ = new MovingAverage(10);
+    movingAverageY = new MovingAverage(10);
     calculate = new Calculate();
     accelerationStartThreshold = 0.1;
 
@@ -38,6 +39,7 @@ AccRealTimeDialog::~AccRealTimeDialog()
     delete accelerometerTimer;
     delete calculate;
     delete movingAverageZ;
+    delete movingAverageY;
     if(resultDialog)
         delete resultDialog;
 }
@@ -69,20 +71,47 @@ void AccRealTimeDialog::readAccelerometerData()
 
     //accelerometer->smoothData(x, y, z);
 
-    //Calculate average
+    //Calculate average for Z
     movingAverageZ->Enqueue(z);
     z = movingAverageZ->Average();
+    //Calculate average for Y
+    movingAverageY->Enqueue(y);
+    y = movingAverageY->Average();
 
     // Apply calibration
     x -= accelerometer->getCalibrationX();
     y -= accelerometer->getCalibrationY();
     z -= accelerometer->getCalibrationZ();
 
+    qreal calY = accelerometer->getCalibrationY();
+    qreal calZ = accelerometer->getCalibrationZ();
+
+    if(calY < 0)
+        calY = -calY;
+    if(calZ < 0)
+        calZ = -calZ;
+
+    //Take acceleration from more affecting axel
+    if(calZ < calY)
+    {
+        z = z*(1+calZ/2);
+        currentAcceleration = z;
+    }
+    else
+    {
+        y = y*(1+calY/2);
+        currentAcceleration = -y;
+    }
+
+    //screen up: y = 0, z = -1
+    //screen front: y = -1, z = 0
+
 //    QString str = QString("acc x: " + QString::number(x) + "\n" +
 //                          "acc y: " + QString::number(y) + "\n" +
 //                          "acc z: " + QString::number(z) + "\n");
 
-    currentAcceleration = z;//sqrt(x*x + y*y + z*z);
+    //currentAcceleration = z;//sqrt(x*x + y*y + z*z);
+    //qDebug("y: %f, calibZ: %f, calibY: %f\n",y,accelerometer->getCalibrationZ(),accelerometer->getCalibrationY());
     changeInAcceleration = currentAcceleration;
 
     if (((fabs(changeInAcceleration) <= accelerationStartThreshold)
index cc59593..bd743a5 100644 (file)
@@ -42,6 +42,7 @@ private:
     Accelerometer* accelerometer;
     Calculate *calculate;
     MovingAverage* movingAverageZ;
+    MovingAverage* movingAverageY;
 
     int updateScreenCounter;
     double accelerationStartThreshold;
index d3d50a2..30b66c7 100644 (file)
@@ -39,7 +39,8 @@ SOURCES += main.cpp \
     helproutingdialog.cpp \
     helpsettingsdialog.cpp \
     custombutton.cpp \
-    profiledialog.cpp
+    profiledialog.cpp \
+    filereader.cpp
 HEADERS += mainwindow.h \
     creditsdialog.h \
     routedialog.h \
@@ -69,7 +70,8 @@ HEADERS += mainwindow.h \
     helproutingdialog.h \
     helpsettingsdialog.h \
     custombutton.h \
-    profiledialog.h
+    profiledialog.h \
+    filereader.h
 FORMS += mainwindow.ui \
     creditsdialog.ui \
     routedialog.ui \