9 const double G_ACCELERATION = 9.80665;
10 const double SECONDS_IN_HOUR = 3600;
12 Calculate::Calculate() {
18 Calculate::~Calculate() {
21 void Calculate::reset() {
33 /* Getters and setters
36 double Calculate::AverageSpeed()
40 void Calculate::AverageSpeed(double value)
44 double Calculate::CurrentSpeed()
48 void Calculate::CurrentSpeed(double value)
52 double Calculate::DistanceTraveled()
54 return distanceTraveled;
56 void Calculate::DistanceTraveled(double value)
58 distanceTraveled = value;
60 double Calculate::LastAcceleration()
62 return lastAcceleration;
64 void Calculate::LastAcceleration(double value)
66 lastAcceleration = value;
68 double Calculate::LastDistance()
72 void Calculate::LastDistance(double value)
76 double Calculate::LastSpeed()
80 void Calculate::LastSpeed(double value)
84 long Calculate::NumOfIterations()
86 return numOfIterations;
88 void Calculate::NumOfIterations(long value)
90 numOfIterations = value;
92 double Calculate::TotalTime()
96 void Calculate::TotalTime(double value)
102 This is a main function for calculating various parameters. Accelerometer
103 provides currentAcceleration and calling function measures time (seconds).
104 This function should be called 20-30 times/second to minimize
107 To be added: params like horsepower.
109 void Calculate::CalculateParameters(double currentAcceleration, double seconds)
112 totalTime = (totalTime + seconds);
115 // v(n) = v(n-1)+(a(n) + a(n-1))*(seconds)/2
117 /* First integration of acceleration provides speed
119 currentSpeed = (lastSpeed + (((currentAcceleration + lastAcceleration) * seconds) / 2));
121 /* Second integration: distance.
123 distanceTraveled = (lastDistance + (((currentSpeed + lastSpeed) * seconds) / 2));
127 averageSpeed = (distanceTraveled / totalTime);
129 /* Check for movement
131 accelStoppedCheck(currentAcceleration);
133 lastSpeed = currentSpeed;
134 lastAcceleration = currentAcceleration;
135 lastDistance = distanceTraveled;
139 * This function checks if acceleration has stopped for
140 * a short period of time. Velocity is set to zero to avoid
143 void Calculate::accelStoppedCheck(double currentAcceleration) {
145 // counting number of acceleration samples that equals zero
146 if (currentAcceleration==0)
155 // if count exceeds 25, we assume that velocity is zero