2 * Acceleration info in real time dialog
4 * @author Jukka Kurttila <jukka.kurttila@fudeco.com>
5 * @copyright (c) 2010 Speed Freak team
6 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
9 #include "accrealtimedialog.h"
10 #include "ui_accrealtimedialog.h"
13 AccRealTimeDialog::AccRealTimeDialog(QWidget *parent) :
15 ui(new Ui::AccRealTimeDialog)
19 accelerometer = new Accelerometer();
20 movingAverageZ = new MovingAverage(10);
21 calculate = new Calculate();
22 accelerationStartThreshold = 0.1;
24 accelerometerTimer = new QTimer(this);
25 connect(accelerometerTimer, SIGNAL(timeout()), this, SLOT(readAccelerometerData()));
27 updateScreenCounter = 0;
28 resetAccelerometerMeasurements();
33 AccRealTimeDialog::~AccRealTimeDialog()
37 delete accelerometerTimer;
39 delete movingAverageZ;
44 void AccRealTimeDialog::changeEvent(QEvent *e)
46 QDialog::changeEvent(e);
48 case QEvent::LanguageChange:
49 ui->retranslateUi(this);
56 *This function is called to read (and process) data from the accelerometer
58 void AccRealTimeDialog::readAccelerometerData()
61 double changeInAcceleration = 0;
64 accelerometer->getAcceleration(x, y, z);
66 // keep the following line as close to the SetKinematicsProperties method as possible
67 currentTime = elapsedTime.elapsed();
69 //accelerometer->smoothData(x, y, z);
72 movingAverageZ->Enqueue(z);
73 z = movingAverageZ->Average();
76 x -= accelerometer->getCalibrationX();
77 y -= accelerometer->getCalibrationY();
78 z -= accelerometer->getCalibrationZ();
80 // QString str = QString("acc x: " + QString::number(x) + "\n" +
81 // "acc y: " + QString::number(y) + "\n" +
82 // "acc z: " + QString::number(z) + "\n");
84 currentAcceleration = z;//sqrt(x*x + y*y + z*z);
85 changeInAcceleration = currentAcceleration;
87 if (((fabs(changeInAcceleration) <= accelerationStartThreshold)
88 && !vehicleStartedMoving))
92 else if(!vehicleStartedMoving)
94 vehicleStartedMoving = true;
100 calculate->calculateParameters(changeInAcceleration, (currentTime - previousTime)/1000);
101 previousTime = currentTime;
103 //s.sprintf("%.2f", changeInAcceleration);
104 //currentAccelerationString = s;
107 speed = calculate->getCurrentSpeed();
110 s.sprintf("%.1f", speed);
113 //s.sprintf("%.2f", calculate->getDistanceTraveled());
114 //distanceTraveled = s;
120 time = calculate->getTotalTime();
122 s.sprintf("%.2f", time);
125 //str.append("ca: " + currentAccelerationString + " G\n" );
126 //str.append("cspeed: " + currentSpeed + " km/h \n" );
127 //str.append("dist: " + distanceTraveled + " m \n" );
128 //str.append("time: " + totalTime + " s \n" );
130 if( updateScreenCounter == 5 )
132 ui->realSpeedLabel->setText( currentSpeed );
133 ui->timeLabel->setText( totalTime );
134 updateScreenCounter = 0;
136 updateScreenCounter++;
138 //Open result dialog if target speed reached
139 if( (stopMeasureSpeed > 0) && (speed > stopMeasureSpeed) )
141 this->accelerometerTimer->stop();
144 resultDialog = new ResultDialog(this);
146 resultDialog->setEnd(stopMeasureSpeed);
148 //Put all times from all speeds
149 QMap<int,double> tempMap = calculate->getValuesMap();
151 for( int i = 1 ; i <= tempMap.count() ; i++ )
153 resultDialog->setValue(i*10,tempMap[i*10]);
155 resultDialog->show();
161 * Resets Accelerometer measurement variables
163 void AccRealTimeDialog::resetAccelerometerMeasurements()
166 currentAcceleration = 0;
174 vehicleStartedMoving = false;
175 stopMeasureSpeed = 0;
177 void AccRealTimeDialog::Calibrate()
179 accelerometer->calibrate();
182 void AccRealTimeDialog::on_buttonAbort_clicked()
184 accelerometerTimer->stop();
185 resetAccelerometerMeasurements();
188 void AccRealTimeDialog::startAccelerationMeasure()
190 double temp = stopMeasureSpeed;
191 resetAccelerometerMeasurements();
192 stopMeasureSpeed = temp;
193 accelerometerTimer->start(40);
195 void AccRealTimeDialog::SetStopMeasureSpeed(double speed)
197 stopMeasureSpeed = speed;