9 const double G_ACCELERATION = 9.80665;
10 const double SECONDS_IN_HOUR = 3600;
12 Calculate::Calculate()
17 Calculate::~Calculate()
22 void Calculate::reset()
35 // Getters and setters
37 double Calculate::getAverageSpeed()
42 void Calculate::setAverageSpeed(double value)
47 double Calculate::getCurrentSpeed()
52 void Calculate::setCurrentSpeed(double value)
57 double Calculate::getDistanceTraveled()
59 return distanceTraveled;
62 void Calculate::setDistanceTraveled(double value)
64 distanceTraveled = value;
67 double Calculate::getLastAcceleration()
69 return lastAcceleration;
72 void Calculate::setLastAcceleration(double value)
74 lastAcceleration = value;
77 double Calculate::getLastDistance()
82 void Calculate::setLastDistance(double value)
87 double Calculate::getLastSpeed()
92 void Calculate::setLastSpeed(double value)
97 long Calculate::getNumOfIterations()
99 return numOfIterations;
102 void Calculate::setNumOfIterations(long value)
104 numOfIterations = value;
107 double Calculate::getTotalTime()
112 void Calculate::setTotalTime(double value)
118 * This is a main function for calculating various parameters. Accelerometer
119 * provides currentAcceleration and calling function measures time (seconds).
120 * This function should be called 20-30 times/second to minimize
123 * To be added: params like horsepower.
125 void Calculate::calculateParameters(double currentAcceleration, double seconds)
128 totalTime = (totalTime + seconds);
131 // v(n) = v(n-1)+(a(n) + a(n-1))*(seconds)/2
133 // First integration of acceleration provides speed
134 currentSpeed = (lastSpeed + (((currentAcceleration + lastAcceleration) * seconds) / 2));
136 // Second integration: distance.
137 distanceTraveled = (lastDistance + (((currentSpeed + lastSpeed) * seconds) / 2));
140 averageSpeed = (distanceTraveled / totalTime);
142 // Check for movement
143 accelStoppedCheck(currentAcceleration);
145 lastSpeed = currentSpeed;
146 lastAcceleration = currentAcceleration;
147 lastDistance = distanceTraveled;
151 * This function checks if acceleration has stopped for
152 * a short period of time. Velocity is set to zero to avoid
155 void Calculate::accelStoppedCheck(double currentAcceleration)
158 // counting number of acceleration samples that equals zero
159 if (currentAcceleration==0) {
165 // if count exceeds 25, we assume that velocity is zero