X-Git-Url: http://git.maemo.org/git/?p=speedfreak;a=blobdiff_plain;f=Client%2Fcarmainwindow.cpp;h=5da33b71d655daf542776022249ecf33762cf3a3;hp=0deeddcba40f7c266326870e95caf3f6c076f0a3;hb=b8104711348ebb86e8c93b23067af8f699870626;hpb=c63635d593264450967d1875c7c4849adb7e1d07 diff --git a/Client/carmainwindow.cpp b/Client/carmainwindow.cpp index 0deeddc..5da33b7 100644 --- a/Client/carmainwindow.cpp +++ b/Client/carmainwindow.cpp @@ -7,6 +7,7 @@ * @author Olavi Pulkkinen * @author Rikhard Kuutti * @author Kai Rasilainen + * @author Jukka Kurttila * @copyright (c) 2010 Speed Freak team * @license http://opensource.org/licenses/gpl-license.php GNU Public License */ @@ -14,8 +15,8 @@ #include "carmainwindow.h" #include "math.h" -#define kAccelerometerSampleRate 50 -#define kFilteringFactor 0.2 +#define kAccelerometerSampleRate 40 +#define kFilteringFactor 0.1 #define kSecondsInHour 3600 /** @@ -26,6 +27,11 @@ CarMainWindow::CarMainWindow(QWidget *parent):QMainWindow(parent), ui(new Ui::Ca { ui->setupUi(this); ui->tabWidget->setCurrentWidget(this->ui->StartTab); + + //Disable start buttons before calibration + ui->autoStartButton->setEnabled(false); + ui->manualStartButton->setEnabled(false); + result = new ResultDialog(); //measure = new MeasureDialog(); welcomeDialog = new WelcomeDialog(); @@ -64,13 +70,14 @@ CarMainWindow::CarMainWindow(QWidget *parent):QMainWindow(parent), ui(new Ui::Ca // Accelerometer accelerometer = new Accelerometer(); + movingAverageZ = new MovingAverage(10); reverseAccelerationFlag = false; vehicleStartedMoving = false; isNewRun = true; isSetup = false; stopTime = 0; - accelerationStartThreshold = 0.02; + accelerationStartThreshold = 0.1; accelerometerTimer = new QTimer(this); connect(accelerometerTimer, SIGNAL(timeout()), this, SLOT(readAccelerometerData())); @@ -83,7 +90,7 @@ CarMainWindow::CarMainWindow(QWidget *parent):QMainWindow(parent), ui(new Ui::Ca resetAccelerometerMeasurements(); measures = new Measures(); - this->initializeMeasures(); + measures->initializeMembers(); this->timer->setInterval(100); @@ -149,37 +156,42 @@ void CarMainWindow::on_listViewStartTabAccelerationCategories_clicked(QModelInde { QString str = index.data().toString(); QStringList list = str.split("-"); - QStringList list2 = list[1].split(" "); + QStringList list3 = list[1].split(" "); + QStringList list2 = list[0].split(" "); - ui->lineEditStartTabMin->setText(list[0]); - ui->lineEditStartTabMax->setText(list2[0]); - updateComboBoxStartTabUnits(list2[1]); + ui->lineEditStartTabMin->setText(list2[1]); + ui->lineEditStartTabMax->setText(list3[0]); + updateComboBoxStartTabUnits(list3[1]); } /** *This slot function is called when ever auto start button clicked. Start-tab view. + *@todo Check setDiagramGapStem(100) <- (choiceInt == 2) */ void CarMainWindow::on_autoStartButton_clicked() { - initializeMeasures(); + measures->initializeMembers(); resetAccelerometerMeasurements(); ui->pushButtonSendResult->setEnabled(false); ui->pushButtonShowResultDialog->setEnabled(false); choice = ui->listViewStartTabAccelerationCategories->currentIndex(); choiceInt = choice.row(); - qDebug() << choiceInt; + //qDebug() << "choiceInt" << choiceInt << " " << catList.at(choiceInt); if (choiceInt == 0) { ui->labelMeasureTabHeader->setText("Accelerate to 40 km/h"); result->setDiagramGapStem(75); } - else if (choiceInt == 1) { ui->labelMeasureTabHeader->setText("Accelerate to 100 km/h"); result->setDiagramGapStem(30); + } + else if (choiceInt == 2) + { + ui->labelMeasureTabHeader->setText("Accelerate to 10 km/h"); + result->setDiagramGapStem(100); } - else { ui->labelMeasureTabHeader->setText("Accelerate to 80 km/h"); @@ -223,10 +235,19 @@ void CarMainWindow::setComboBoxStartTabUnits(QStringList units) /** *This function is used to init listViewStartTabAccelerationCategories. Start-tab view. + *@todo During development categories index values that are used for measuring are hardcoded + *@todo and accelerationCategoriesStartTab and catList are used instead of using + *@todo CategoryList::categoryList and CategoryList::cats. */ void CarMainWindow::initListViewStartTabAccelerationCategories() { - accelerationCategoriesStartTab << "0-40 km/h" << "0-100 km/h"; //<< "0-1/4 Mile" << "0-1/8 Mile" << "0-50 km" << "50-100 Mile" << "0-60 Mph" << "0-100 m" << "0-50 ft" << "0-50 yrd" << "0-500 in"; + //Connect the user`s choice fron GUI to a correct variable name + catList.insert(0,"acceleration-0-40"); + catList.insert(1,"acceleration-0-100"); + catList.insert(2,"acceleration-0-10"); + + accelerationCategoriesStartTab << "Acceleration 0-40 km/h" << "Acceleration 0-100 km/h" << "Acceleration 0-10 km/h"; + //<< "0-1/4 Mile" << "0-1/8 Mile" << "50-100 Mile" << "0-60 Mph" << "0-100 m" << "0-50 ft" << "0-50 yrd" << "0-500 in"; QAbstractItemModel *model = new StringListModel(accelerationCategoriesStartTab); ui->listViewStartTabAccelerationCategories->setModel(model); } @@ -241,6 +262,11 @@ void CarMainWindow::setListViewStartTabAccelerationCategories(QStringList accele ui->listViewStartTabAccelerationCategories->setModel(model); } +void CarMainWindow::setLabelInfoToUser(QString infoText) +{ + ui->labelInfoToUser->setText(infoText); +} + /** *This function is used to set items to category combobox. Top-tab view. *@param @@ -336,27 +362,20 @@ void CarMainWindow::on_manualStartButton_clicked() */ void CarMainWindow::after_timeout() { - if ( gpsSpeed > 1.0 ) + //IF GPS checkbox is ON + if (ui->gpsOnCheckBox->isChecked()) { - timeFromGps += 0.1; + if ( gpsSpeed > 1.0 ) + { + timeFromGps += 0.1; + } } -} -/** - * Initializes measures class's member variables. - */ -void CarMainWindow::initializeMeasures() -{ - measures->setTime10kmh(0); - measures->setTime20kmh(0); - measures->setTime30kmh(0); - measures->setTime40kmh(0); - measures->setTime50kmh(0); - measures->setTime60kmh(0); - measures->setTime70kmh(0); - measures->setTime80kmh(0); - measures->setTime90kmh(0); - measures->setTime100kmh(0); + else + { + ui->labelMeasureTabSpeed->setText(QString::number(this->speed)); //Set speed. //Measure-tab view. + ui->labelMeasureTabTime->setText(QString::number(this->time)); //Set time. //Measure-tab view. + } } /** @@ -369,16 +388,7 @@ void CarMainWindow::on_pushButtonMeasureTabAbort_clicked() ui->labelMeasureTabResult->hide(); ui->labelMeasureTabTime->setText(""); ui->labelMeasureTabSpeed->setText(""); - measures->setTime10kmh(0); - measures->setTime20kmh(0); - measures->setTime30kmh(0); - measures->setTime40kmh(0); - measures->setTime50kmh(0); - measures->setTime60kmh(0); - measures->setTime70kmh(0); - measures->setTime80kmh(0); - measures->setTime90kmh(0); - measures->setTime100kmh(0); + measures->initializeMembers(); this->accelerometerTimer->stop(); this->timer->stop(); this->time = 0; @@ -397,7 +407,8 @@ void CarMainWindow::on_pushButtonMeasureTabAbort_clicked() */ void CarMainWindow::on_pushButtonSendResult_clicked() { - myHttpClient->sendResultXml("acceleration-0-100"); + //Pick up relevant category name and pass it to the server + myHttpClient->sendResultXml(catList.at(choiceInt)); ui->pushButtonSendResult->setEnabled(false); } @@ -428,7 +439,16 @@ void CarMainWindow::regUserToServer() void CarMainWindow::on_drawRoutePushButton_clicked() { - myRoute->show(); + QString routeFile = QString("route.txt"); + if (myRoute->readRouteFromFile( routeFile) == true) + { + myRoute->show(); + } +} + +void CarMainWindow::on_sendRoutePushButton_clicked() +{ + myHttpClient->sendRouteXml(); } /** @@ -456,13 +476,13 @@ void CarMainWindow::resetAccelerometerMeasurements() currentSpeed = ""; currentTime = 0; distanceTraveled = ""; - firstAcceleration = 0; + //firstAcceleration = 0; //horsepower = null; isNewRun = true; //lastScreenUpdateInSeconds = 0; previousTime = 0; reverseAccelerationFlag = false; - stopWatch.setHMS(0, 0, 0, 0); + stopWatch.start(); //accelerometer->stop(); totalTime = ""; vehicleStartedMoving = false; @@ -532,7 +552,6 @@ void CarMainWindow::handleCheckPoint(double totalTime, double currentSpeed) this->speed = 0; counterForSaveResults = 0; } - else if (choiceInt == 1 && measures->getTime100kmh() != 0) { setTimeAxisGapAndShowResult(measures->getTime100kmh()); @@ -541,9 +560,16 @@ void CarMainWindow::handleCheckPoint(double totalTime, double currentSpeed) this->time = 0; this->speed = 0; counterForSaveResults = 0; - } - + else if (choiceInt == 2 && measures->getTime10kmh() != 0) + { + setTimeAxisGapAndShowResult(measures->getTime10kmh()); + this->timer->stop(); + this->accelerometerTimer->stop(); + this->time = 0; + this->speed = 0; + counterForSaveResults = 0; + } else if (choiceInt != 1 && choiceInt != 0 && measures->getTime80kmh() != 0) { setTimeAxisGapAndShowResult(measures->getTime80kmh()); @@ -553,10 +579,9 @@ void CarMainWindow::handleCheckPoint(double totalTime, double currentSpeed) this->speed = 0; counterForSaveResults = 0; } - else { - + qDebug() << "something wrong in handleCheckPoint()"; } } @@ -570,7 +595,15 @@ void CarMainWindow::readAccelerometerData() qreal x, y, z; accelerometer->getAcceleration(x, y, z); - accelerometer->smoothData(x, y, z); + + // keep the following line as close to the SetKinematicsProperties method as possible + currentTime = stopWatch.elapsed(); + + //accelerometer->smoothData(x, y, z); + + //Calculate average + movingAverageZ->Enqueue(z); + z = movingAverageZ->Average(); // Apply calibration x -= accelerometer->getCalibrationX(); @@ -581,54 +614,22 @@ void CarMainWindow::readAccelerometerData() "acc y: " + QString::number(y) + "\n" + "acc z: " + QString::number(z) + "\n"); - if (!vehicleStartedMoving) - { - if (isNewRun) - { - firstAcceleration = sqrt(x*x + y*y + z*z); - //firstAcceleration = y; // first read - isNewRun = false; - } - } - - currentAcceleration = sqrt(x*x + y*y + z*z); - changeInAcceleration = (currentAcceleration - firstAcceleration); // firstAcceleration only gets set once + currentAcceleration = z;//sqrt(x*x + y*y + z*z); + changeInAcceleration = currentAcceleration; if (((fabs(changeInAcceleration) <= accelerationStartThreshold) && !vehicleStartedMoving)) { return; } - - if (reverseAccelerationFlag) + else if(!vehicleStartedMoving) { - // will be false until after 1st calculation - if ((changeInAcceleration <= 0)) - { - // actually increasing here... - changeInAcceleration = fabs(changeInAcceleration); - } - else - { - // actually decreasing here... - changeInAcceleration = (changeInAcceleration * -1); - } - } - if (!vehicleStartedMoving) - { - if ((changeInAcceleration < 0)) - { - // we started to move backwards first time through - reverseAccelerationFlag = true; - changeInAcceleration = fabs(changeInAcceleration); - } vehicleStartedMoving = true; - - stopWatch.setHMS(0, 0, 0, 0); stopWatch.start(); + previousTime = 0; + currentTime = 0; } - // keep the following line as close to the SetKinematicsProperties method as possible - currentTime = stopWatch.elapsed(); + calculate->calculateParameters(changeInAcceleration, (currentTime - previousTime)/1000); previousTime = currentTime; @@ -637,8 +638,8 @@ void CarMainWindow::readAccelerometerData() speed = 0.0; speed = calculate->getCurrentSpeed(); - speed = ((speed*1000)/kSecondsInHour); - s.sprintf("%.2f", speed); + speed = speed*3.6;//((speed*1000)/kSecondsInHour); + s.sprintf("%.1f", speed); currentSpeed = s; s.sprintf("%.2f", calculate->getDistanceTraveled()); @@ -766,7 +767,7 @@ void CarMainWindow::gpsStatus() */ void CarMainWindow::gpsTimerTimeout() { - int time1000ms; + int time1000ms = 0; time1000ms += 10; //IF time is 1 second @@ -835,3 +836,12 @@ void CarMainWindow::setTimeAxisGapAndShowResult(double pTime) result->setDiagramGapHorizontal(20); } } + +void CarMainWindow::on_calibrateButton_clicked() +{ + ui->autoStartButton->setEnabled(true); + ui->manualStartButton->setEnabled(true); + + this->accelerometer->calibrate(); +} +