* Calculate class to process accelerometer data
*
* @author Kai Rasilainen
+ * @author Jukka Kurttila <jukka.kurttila@fudeco.com>
* @copyright (c) 2010 Speed Freak team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*/
void Calculate::reset()
{
averageSpeed = 0;
+ averagePower = 0;
+ peakPower = 0;
+ currentPower = 0;
currentSpeed = 0;
+ maxSpeed = 0;
distanceTraveled = 0;
lastAcceleration = 0;
lastDistance = 0;
totalTime = 0;
count = 0;
- speedCheckPoints.append(10);
- speedCheckPoints.append(20);
- speedCheckPoints.append(30);
- speedCheckPoints.append(40);
+ if(speedCheckPoints.count() == 0)
+ {
+ speedCheckPoints.append(10);
+ speedCheckPoints.append(20);
+ speedCheckPoints.append(30);
+ speedCheckPoints.append(40);
+ speedCheckPoints.append(50);
+ speedCheckPoints.append(60);
+ speedCheckPoints.append(70);
+ speedCheckPoints.append(80);
+ speedCheckPoints.append(90);
+ speedCheckPoints.append(100);
+ }
+
+ checkPointCounter = 0;
+ checkPoint = speedCheckPoints[checkPointCounter];
}
* This function should be called 20-30 times/second to minimize
* calculation error.
- * To be added: params like horsepower.
+ * To be added: ---
*/
void Calculate::calculateParameters(double currentAcceleration, double seconds)
{
double force, power1, power2;
+
+ currentAcceleration *= G_ACCELERATION;
numOfIterations++;
totalTime = (totalTime + seconds);
// First integration of acceleration provides speed
currentSpeed = (lastSpeed + (((currentAcceleration + lastAcceleration) * seconds) / 2));
+ // Update maximum speed
+ if (currentSpeed > maxSpeed)
+ maxSpeed = currentSpeed;
+
// Second integration: distance.
distanceTraveled = (lastDistance + (((currentSpeed + lastSpeed) * seconds) / 2));
numOfIterations--;
}
- // Checkpoints
- if ((lastSpeed == 0))
+ if( (checkPoint > 0) && (currentSpeed*3.6 > checkPoint) )
{
- lastCheckpoint = 0;
- }
-
- // List of checkpoints
- if (!(speedCheckPoints.isEmpty()))
- {
- foreach (double speed, speedCheckPoints)
+ //Update checkPoint
+ if( checkPointCounter <= speedCheckPoints.count() )
{
- if ((lastCheckpoint != floor(speed)) && (floor(currentSpeed) == floor(speed)))
+ //Save time
+ valuesMap.insert( checkPoint, totalTime );
+ if( checkPointCounter < speedCheckPoints.count() )
{
- emit checkPointReached(totalTime, currentSpeed);
- lastCheckpoint = floor(currentSpeed);
+ checkPoint = speedCheckPoints[checkPointCounter];
}
+ else
+ {
+ checkPoint = 0;
+ }
+ checkPointCounter++;
}
}
// Check for movement
- accelStoppedCheck(currentAcceleration);
+ //accelStoppedCheck(currentAcceleration);
lastSpeed = currentSpeed;
lastAcceleration = currentAcceleration;
*/
void Calculate::accelStoppedCheck(double currentAcceleration)
{
-
// counting number of acceleration samples that equals zero
if (currentAcceleration==0) {
count++;
{
totalTime = value;
}
+
+double Calculate::getCurrentPower()
+{
+ return currentPower;
+}
+
+void Calculate::setCurrentPower(double value)
+{
+ currentPower = value;
+}
+
+double Calculate::getPeakPower()
+{
+ return peakPower;
+}
+
+void Calculate::setPeakPower(double value)
+{
+ peakPower = value;
+}
+
+double Calculate::getAveragePower()
+{
+ if (numOfIterations > 0)
+ {
+ return (averagePower/numOfIterations);
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+void Calculate::setAveragePower(double value)
+{
+ averagePower = value;
+}
+
+double Calculate::getMaxSpeed()
+{
+ return maxSpeed;
+}
+
+void Calculate::setMaxSpeed(double value)
+{
+ maxSpeed = value;
+}
+
+QMap<int,double> Calculate::getValuesMap()
+{
+ return valuesMap;
+}