From e7ab1f1b6219bf316acff1d1a3719cf1f22ec3c0 Mon Sep 17 00:00:00 2001 From: Jukka Kurttila Date: Thu, 20 May 2010 10:34:40 +0300 Subject: [PATCH] Acceleration counted also from y axel. --- Client/accelerometer.cpp | 35 +++++++++++++++++++++++++++++++++-- Client/accelerometer.h | 4 ++++ Client/accrealtimedialog.cpp | 33 +++++++++++++++++++++++++++++++-- Client/accrealtimedialog.h | 1 + Client/speedfreak.pro | 6 ++++-- 5 files changed, 73 insertions(+), 6 deletions(-) diff --git a/Client/accelerometer.cpp b/Client/accelerometer.cpp index 9bfd904..cba6a78 100644 --- a/Client/accelerometer.cpp +++ b/Client/accelerometer.cpp @@ -3,11 +3,12 @@ * * @author Rikhard Kuutti * @author Kai Rasilainen - * @author Jukka Kurttila + * @author Jukka Kurttila * @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 @@ -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(reply.argumentAt<4>()) / 1000; z = static_cast(reply.argumentAt<5>()) / 1000; } +#endif } /** diff --git a/Client/accelerometer.h b/Client/accelerometer.h index 53e9ca0..d246f6d 100644 --- a/Client/accelerometer.h +++ b/Client/accelerometer.h @@ -13,6 +13,7 @@ #include +#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 diff --git a/Client/accrealtimedialog.cpp b/Client/accrealtimedialog.cpp index fd5100f..4b46af1 100644 --- a/Client/accrealtimedialog.cpp +++ b/Client/accrealtimedialog.cpp @@ -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) diff --git a/Client/accrealtimedialog.h b/Client/accrealtimedialog.h index cc59593..bd743a5 100644 --- a/Client/accrealtimedialog.h +++ b/Client/accrealtimedialog.h @@ -42,6 +42,7 @@ private: Accelerometer* accelerometer; Calculate *calculate; MovingAverage* movingAverageZ; + MovingAverage* movingAverageY; int updateScreenCounter; double accelerationStartThreshold; diff --git a/Client/speedfreak.pro b/Client/speedfreak.pro index d3d50a2..30b66c7 100644 --- a/Client/speedfreak.pro +++ b/Client/speedfreak.pro @@ -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 \ -- 1.7.9.5