From 5d2cf18fd324ae866bce814f9eb6bf141c35aaa8 Mon Sep 17 00:00:00 2001 From: Rikhard Kuutti Date: Wed, 3 Mar 2010 09:58:28 +0200 Subject: [PATCH] Refactored and commented Accelerometer class code --- Client/accelerometer.cpp | 117 +++++++++++++++++++++++++++++----------------- Client/accelerometer.h | 9 ++-- 2 files changed, 81 insertions(+), 45 deletions(-) diff --git a/Client/accelerometer.cpp b/Client/accelerometer.cpp index 6f642f9..8733d32 100644 --- a/Client/accelerometer.cpp +++ b/Client/accelerometer.cpp @@ -26,6 +26,11 @@ Accelerometer::Accelerometer() initValues(); } +/** + * Constructor for Accelerometer class that takes accelerometer sample rate as parameter + * + * @param p_SampleRate the desired sample rate of accelerometer in milliseconds + */ Accelerometer::Accelerometer(int p_SampleRate) { calculate = new Calculate(); @@ -40,14 +45,16 @@ Accelerometer::Accelerometer(int p_SampleRate) * Default destructor for Accelerometer class * */ -Accelerometer::~Accelerometer() { +Accelerometer::~Accelerometer() +{ } /** * Start measuring * */ -void Accelerometer::start() { +void Accelerometer::start() +{ initValues(); calibrate(); timer->start(sampleRate); @@ -58,7 +65,8 @@ void Accelerometer::start() { * Init class members * */ -void Accelerometer::initValues() { +void Accelerometer::initValues() +{ accelerationX=0; accelerationY=0; accelerationZ=0; @@ -87,34 +95,35 @@ void Accelerometer::initValues() { * accelerometer when stationary. * */ -void Accelerometer::calibrate(void) { +void Accelerometer::calibrate(void) +{ QFile file(kFileName); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; - unsigned int iteration; - iteration = 0; + unsigned int iteration = 0; + QByteArray line; QRegExp rx("([0-9-]+) ([0-9-]+) ([0-9-]+)"); - do{ + do { // Read data, parse with regular expressions and process it line = file.readLine(); rx.indexIn(line); - int Sample_X = rx.cap(1).toInt(); - int Sample_Y = rx.cap(2).toInt(); - int Sample_Z = rx.cap(3).toInt(); + int sampleX = rx.cap(1).toInt(); + int sampleY = rx.cap(2).toInt(); + int sampleZ = rx.cap(3).toInt(); - sstatex += Sample_X; // Accumulate Samples - sstatey += Sample_Y; // for all axes. - sstatez += Sample_Z; + calibrationX += sampleX; // Accumulate Samples + calibrationY += sampleY; // for all axes. + calibrationZ += sampleZ; iteration++; - }while(iteration!=1024); // 1024 times + } while(iteration!=1024); // 1024 times - sstatex = sstatex>>10; // division by 1024 - sstatey = sstatey>>10; - sstatez = sstatez>>10; + calibrationX = sstatex>>10; // division by 1024 + calibrationY = sstatey>>10; + calibrationZ = sstatez>>10; file.close(); } @@ -123,74 +132,97 @@ void Accelerometer::calibrate(void) { * Stop measuring * */ -void Accelerometer::stop() { +void Accelerometer::stop() +{ timer->stop(); } /** * Set the sample rate of accelerometer * - * @param int pSampleRate desired sample rate + * @param pSampleRate desired sample rate */ -void Accelerometer::setSampleRate(int pSampleRate) { +void Accelerometer::setSampleRate(int pSampleRate) +{ sampleRate = pSampleRate; } -int Accelerometer::getSampleRate() { +/** + * Get the sample rate of accelerometer + * + * @return sampleRate the sample rate of the accelerometer in milliseconds + */ +int Accelerometer::getSampleRate() +{ return sampleRate; } -qreal Accelerometer::getCurrentAcceleration() { +qreal Accelerometer::getCurrentAcceleration() +{ return currentAcceleration; } -qreal Accelerometer::getPreviousTotalAcceleration() { +qreal Accelerometer::getPreviousTotalAcceleration() +{ return previousAcceleration; } -qreal Accelerometer::getTotalAcceleration() { +qreal Accelerometer::getTotalAcceleration() +{ return totalAcceleration; } -qreal Accelerometer::getDistanceTraveled() { +qreal Accelerometer::getDistanceTraveled() +{ return distanceTraveled; } -qreal Accelerometer::getLastDistanceTraveled() { +qreal Accelerometer::getLastDistanceTraveled() +{ return lastDistanceTraveled; } -qreal Accelerometer::getAverageSpeed() { +qreal Accelerometer::getAverageSpeed() +{ return averageSpeed; } -qreal Accelerometer::getTrueAccelerationX() { +qreal Accelerometer::getTrueAccelerationX() +{ return trueAccelerationX; } -qreal Accelerometer::getTrueAccelerationY() { +qreal Accelerometer::getTrueAccelerationY() +{ return trueAccelerationY; } -qreal Accelerometer::getTrueAccelerationZ() { +qreal Accelerometer::getTrueAccelerationZ() +{ return trueAccelerationZ; } -qreal Accelerometer::getPreviousSpeed() { +qreal Accelerometer::getPreviousSpeed() +{ return previousSpeed; } -qreal Accelerometer::getCurrentSpeed() { +qreal Accelerometer::getCurrentSpeed() +{ return currentSpeed; } -qreal Accelerometer::getIntervalTime() { +qreal Accelerometer::getIntervalTime() +{ return intervalTime; } /** * Processes Accelerometer data * + * Opens the accelerometer value file for reading and reads and parses accelerometer values. + * Forwards data to Calculate class for processing + * */ void Accelerometer::processData() { @@ -199,16 +231,15 @@ void Accelerometer::processData() // Read data, parse with regular expressions and process it QByteArray line = file.readLine(); - //QByteArray line; QRegExp rx("([0-9-]+) ([0-9-]+) ([0-9-]+)"); rx.indexIn(line); smoothData(rx.cap(1).toInt(), rx.cap(2).toInt(), rx.cap(3).toInt()); - // Add calibration - trueAccelerationX = accelerationX - sstatex; - trueAccelerationY = accelerationY - sstatey; - trueAccelerationZ = accelerationZ - sstatez; + // Apply calibration + trueAccelerationX = accelerationX - calibrationX; + trueAccelerationY = accelerationY - calibrationY; + trueAccelerationZ = accelerationZ - calibrationZ; // Discrimination window for acceleration values if (trueAccelerationX <= 30 && trueAccelerationX >= -30) { trueAccelerationX = 0; } @@ -245,17 +276,19 @@ void Accelerometer::processData() currentSpeed = calculate->CurrentSpeed(); distanceTraveled = calculate->DistanceTraveled(); + file.close(); } /** * Smooths Accelerometer data * - * @param qreal x Accelerometers x-axis raw input - * @param qreal y Accelerometers y-axis raw input - * @param qreal z Accelerometers z-axis raw input + * @param x accelerometer's x-axis input + * @param y accelerometer's y-axis input + * @param z accelerometer's z-axis input */ -void Accelerometer::smoothData(qreal x, qreal y, qreal z) { +void Accelerometer::smoothData(qreal x, qreal y, qreal z) +{ accelerationX = x; accelerationY = y; accelerationZ = z; diff --git a/Client/accelerometer.h b/Client/accelerometer.h index bb5d3aa..8eef4aa 100644 --- a/Client/accelerometer.h +++ b/Client/accelerometer.h @@ -48,20 +48,23 @@ private slots: void processData(); void smoothData(qreal x, qreal y, qreal z); -public: +private: Calculate *calculate; -private: qreal accelerationX, accelerationY, accelerationZ; qreal trueAccelerationX,trueAccelerationY,trueAccelerationZ; qreal previousAccelerationX,previousAccelerationY,previousAccelerationZ; qreal previousSpeed, currentSpeed; qreal currentAcceleration, previousAcceleration, totalAcceleration; + QTime now; QTimer *timer; + double intervalTime; double totalTime; - double distanceTraveled,lastDistanceTraveled,averageSpeed; + double distanceTraveled; + double lastDistanceTraveled; + double averageSpeed; double sampleRate; bool reverseAcceleration; -- 1.7.9.5