1 #include "accrealtimedialog.h"
2 #include "ui_accrealtimedialog.h"
5 AccRealTimeDialog::AccRealTimeDialog(QWidget *parent) :
7 ui(new Ui::AccRealTimeDialog)
11 accelerometer = new Accelerometer();
12 movingAverageZ = new MovingAverage(10);
13 calculate = new Calculate();
14 accelerationStartThreshold = 0.1;
16 accelerometerTimer = new QTimer(this);
17 connect(accelerometerTimer, SIGNAL(timeout()), this, SLOT(readAccelerometerData()));
19 updateScreenCounter = 0;
20 resetAccelerometerMeasurements();
23 QPixmap pixMap("back.png",0,Qt::AutoColor);
24 ui->pictureLabel->setPixmap(pixMap);
27 AccRealTimeDialog::~AccRealTimeDialog()
31 delete accelerometerTimer;
33 delete movingAverageZ;
36 void AccRealTimeDialog::changeEvent(QEvent *e)
38 QDialog::changeEvent(e);
40 case QEvent::LanguageChange:
41 ui->retranslateUi(this);
48 *This function is called to read (and process) data from the accelerometer
50 void AccRealTimeDialog::readAccelerometerData()
53 double changeInAcceleration = 0;
56 accelerometer->getAcceleration(x, y, z);
58 // keep the following line as close to the SetKinematicsProperties method as possible
59 currentTime = elapsedTime.elapsed();
61 //accelerometer->smoothData(x, y, z);
64 movingAverageZ->Enqueue(z);
65 z = movingAverageZ->Average();
68 x -= accelerometer->getCalibrationX();
69 y -= accelerometer->getCalibrationY();
70 z -= accelerometer->getCalibrationZ();
72 QString str = QString("acc x: " + QString::number(x) + "\n" +
73 "acc y: " + QString::number(y) + "\n" +
74 "acc z: " + QString::number(z) + "\n");
76 currentAcceleration = z;//sqrt(x*x + y*y + z*z);
77 changeInAcceleration = currentAcceleration;
79 if (((fabs(changeInAcceleration) <= accelerationStartThreshold)
80 && !vehicleStartedMoving))
84 else if(!vehicleStartedMoving)
86 vehicleStartedMoving = true;
92 calculate->calculateParameters(changeInAcceleration, (currentTime - previousTime)/1000);
93 previousTime = currentTime;
95 //s.sprintf("%.2f", changeInAcceleration);
96 //currentAccelerationString = s;
99 speed = calculate->getCurrentSpeed();
102 s.sprintf("%.1f", speed);
105 //s.sprintf("%.2f", calculate->getDistanceTraveled());
106 //distanceTraveled = s;
112 time = calculate->getTotalTime();
114 s.sprintf("%.2f", time);
117 //str.append("ca: " + currentAccelerationString + " G\n" );
118 //str.append("cspeed: " + currentSpeed + " km/h \n" );
119 //str.append("dist: " + distanceTraveled + " m \n" );
120 //str.append("time: " + totalTime + " s \n" );
122 if( updateScreenCounter == 5 )
124 ui->realSpeedLabel->setText( currentSpeed );
125 ui->timeLabel->setText( totalTime );
126 updateScreenCounter = 0;
128 updateScreenCounter++;
130 //Open result dialog if target speed reached
131 if( speed > stopMeasureSpeed )
133 this->accelerometerTimer->stop();
138 * Resets Accelerometer measurement variables
140 void AccRealTimeDialog::resetAccelerometerMeasurements()
143 currentAcceleration = 0;
151 vehicleStartedMoving = false;
152 stopMeasureSpeed = 0;
154 void AccRealTimeDialog::Calibrate()
156 accelerometer->calibrate();
159 void AccRealTimeDialog::on_buttonAbort_clicked()
161 accelerometerTimer->stop();
162 resetAccelerometerMeasurements();
165 void AccRealTimeDialog::startAccelerationMeasure()
167 accelerometerTimer->start(40);
169 void AccRealTimeDialog::SetStopMeasureSpeed(double speed)
171 stopMeasureSpeed = speed;