2 * Acceleration info in real time dialog
4 * @author Jukka Kurttila <jukka.kurttila@fudeco.com>
5 * @author Toni Jussila <toni.jussila@fudeco.com>
6 * @copyright (c) 2010 Speed Freak team
7 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
10 #include "accrealtimedialog.h"
11 #include "ui_accrealtimedialog.h"
14 AccRealTimeDialog::AccRealTimeDialog(QWidget *parent) :
16 ui(new Ui::AccRealTimeDialog)
20 accelerometer = new Accelerometer();
21 movingAverageZ = new MovingAverage(10);
22 calculate = new Calculate();
23 accelerationStartThreshold = 0.1;
25 accelerometerTimer = new QTimer(this);
26 connect(accelerometerTimer, SIGNAL(timeout()), this, SLOT(readAccelerometerData()));
28 updateScreenCounter = 0;
29 resetAccelerometerMeasurements();
34 AccRealTimeDialog::~AccRealTimeDialog()
38 delete accelerometerTimer;
40 delete movingAverageZ;
45 void AccRealTimeDialog::changeEvent(QEvent *e)
47 QDialog::changeEvent(e);
49 case QEvent::LanguageChange:
50 ui->retranslateUi(this);
57 *This function is called to read (and process) data from the accelerometer
59 void AccRealTimeDialog::readAccelerometerData()
62 double changeInAcceleration = 0;
65 accelerometer->getAcceleration(x, y, z);
67 // keep the following line as close to the SetKinematicsProperties method as possible
68 currentTime = elapsedTime.elapsed();
70 //accelerometer->smoothData(x, y, z);
73 movingAverageZ->Enqueue(z);
74 z = movingAverageZ->Average();
77 x -= accelerometer->getCalibrationX();
78 y -= accelerometer->getCalibrationY();
79 z -= accelerometer->getCalibrationZ();
81 // QString str = QString("acc x: " + QString::number(x) + "\n" +
82 // "acc y: " + QString::number(y) + "\n" +
83 // "acc z: " + QString::number(z) + "\n");
85 currentAcceleration = z;//sqrt(x*x + y*y + z*z);
86 changeInAcceleration = currentAcceleration;
88 if (((fabs(changeInAcceleration) <= accelerationStartThreshold)
89 && !vehicleStartedMoving))
93 else if(!vehicleStartedMoving)
95 vehicleStartedMoving = true;
101 calculate->calculateParameters(changeInAcceleration, (currentTime - previousTime)/1000);
102 previousTime = currentTime;
104 //s.sprintf("%.2f", changeInAcceleration);
105 //currentAccelerationString = s;
108 speed = calculate->getCurrentSpeed();
111 s.sprintf("%.1f", speed);
114 //s.sprintf("%.2f", calculate->getDistanceTraveled());
115 //distanceTraveled = s;
121 time = calculate->getTotalTime();
123 s.sprintf("%.2f", time);
126 //str.append("ca: " + currentAccelerationString + " G\n" );
127 //str.append("cspeed: " + currentSpeed + " km/h \n" );
128 //str.append("dist: " + distanceTraveled + " m \n" );
129 //str.append("time: " + totalTime + " s \n" );
131 if( updateScreenCounter == 5 )
133 ui->realSpeedLabel->setText( currentSpeed );
134 ui->timeLabel->setText( totalTime );
135 updateScreenCounter = 0;
137 updateScreenCounter++;
139 //Open result dialog if target speed reached
140 if( (stopMeasureSpeed > 0) && (speed > stopMeasureSpeed) )
142 this->accelerometerTimer->stop();
145 resultDialog = new ResultDialog(this);
147 connect(resultDialog, SIGNAL(sendresult(double)), this, SLOT(sendResult(double)));
148 resultDialog->setEnd(stopMeasureSpeed);
150 //Put all times from all speeds
151 QMap<int,double> tempMap = calculate->getValuesMap();
153 for( int i = 1 ; i <= tempMap.count() ; i++ )
155 resultDialog->setValue(i*10,tempMap[i*10]);
157 resultDialog->show();
163 * Resets Accelerometer measurement variables
165 void AccRealTimeDialog::resetAccelerometerMeasurements()
168 currentAcceleration = 0;
176 vehicleStartedMoving = false;
177 stopMeasureSpeed = 0;
180 void AccRealTimeDialog::Calibrate()
182 accelerometer->calibrate();
185 void AccRealTimeDialog::on_buttonAbort_clicked()
187 accelerometerTimer->stop();
188 resetAccelerometerMeasurements();
192 void AccRealTimeDialog::startAccelerationMeasure()
194 double temp = stopMeasureSpeed;
195 resetAccelerometerMeasurements();
196 stopMeasureSpeed = temp;
197 accelerometerTimer->start(40);
200 void AccRealTimeDialog::SetStopMeasureSpeed(double speed)
202 stopMeasureSpeed = speed;
206 *This slot function emit accelerationstart sendresult.
209 void AccRealTimeDialog::sendResult(double result)
211 emit sendresult(result);