Initial commit for Speed Freak app
[speedfreak] / UI / calculate.cpp
diff --git a/UI/calculate.cpp b/UI/calculate.cpp
new file mode 100644 (file)
index 0000000..9fd6e8b
--- /dev/null
@@ -0,0 +1,138 @@
+#include "calculate.h"
+#include <math.h>
+
+#include <QFile>
+#include <QString>
+#include <QTimer>
+#include <QRegExp>
+
+const double G_ACCELERATION = 9.80665;
+const double SECONDS_IN_HOUR = 3600;
+
+Calculate::Calculate() {
+
+    this->reset();
+
+}
+
+Calculate::~Calculate() {
+}
+
+void Calculate::reset() {
+
+    averageSpeed = 0;
+    currentSpeed = 0;
+    distanceTraveled = 0;
+    lastAcceleration = 0;
+    lastDistance = 0;
+    lastSpeed = 0;
+    numOfIterations = 0;
+    totalTime = 0;
+}
+
+/* Getters and setters
+   */
+
+double Calculate::AverageSpeed()
+{
+    return averageSpeed;
+}
+void Calculate::AverageSpeed(double value)
+{
+    averageSpeed = value;
+}
+double Calculate::CurrentSpeed()
+{
+    return currentSpeed;
+}
+void Calculate::CurrentSpeed(double value)
+{
+    currentSpeed = value;
+}
+double Calculate::DistanceTraveled()
+{
+    return distanceTraveled;
+}
+void Calculate::DistanceTraveled(double value)
+{
+    distanceTraveled = value;
+}
+double Calculate::LastAcceleration()
+{
+    return lastAcceleration;
+}
+void Calculate::LastAcceleration(double value)
+{
+    lastAcceleration = value;
+}
+double Calculate::LastDistance()
+{
+    return lastDistance;
+}
+void Calculate::LastDistance(double value)
+{
+    lastDistance = value;
+}
+double Calculate::LastSpeed()
+{
+    return lastSpeed;
+}
+void Calculate::LastSpeed(double value)
+{
+    lastSpeed = value;
+}
+long Calculate::NumOfIterations()
+{
+    return numOfIterations;
+}
+void Calculate::NumOfIterations(long value)
+{
+    numOfIterations = value;
+}
+double Calculate::TotalTime()
+{
+    return totalTime;
+}
+void Calculate::TotalTime(double value)
+{
+    totalTime = value;
+}
+
+/*
+  This is a main function for calculating various parameters. Accelerometer
+  provides currentAcceleration and calling function measures time (seconds).
+  This function should be called 20-30 times/second to minimize
+  calculation error.
+
+  To be added: params like horsepower.
+  */
+void Calculate::CalculateParameters(double currentAcceleration, double seconds)
+{
+    numOfIterations++;
+    totalTime = (totalTime + seconds);
+
+    // v=v0 + a*t
+    // v(n) = v(n-1)+(a(n) + a(n-1))*(seconds)/2
+
+    /* First integration of acceleration provides speed
+       */
+    currentSpeed = (lastSpeed + (((currentAcceleration + lastAcceleration) * seconds) / 2));
+
+    /* Second integration: distance.
+       */
+    distanceTraveled = (lastDistance + (((currentSpeed + lastSpeed) * seconds) / 2));
+
+    /* Average speed
+       */
+    averageSpeed = (distanceTraveled / totalTime);
+
+    lastSpeed = currentSpeed;
+    lastAcceleration = currentAcceleration;
+    lastDistance = distanceTraveled;
+}
+
+
+
+
+
+