- added data validation in calibrate compass

- activatre auto load calibration data
- give possibility to force update in navigation getCourseCorrection
- added drive mode for compass calibration
- removed compass calibration manualControl
This commit is contained in:
2023-05-31 12:48:41 +02:00
parent e0d6853961
commit 38c8a58988
10 changed files with 263 additions and 71 deletions
@@ -0,0 +1,155 @@
/**
* @file menuCalibrateCompass.cpp
* @author Alexander Klein (alex@kleiax.de)
* @brief Contains an implementation of the class MenuManualDrive
* @version 0.1
* @date 2022-01-20
*
* @copyright Copyright (c) 2022
*
*/
#include "menuCalibrateCompass.h"
MenuCalibrateCompass::MenuCalibrateCompass(DriveManager* driveManager) : MenuDriveMode(driveManager) {
this->caliCompass = new CalibrateCompass(this->driveManager->getNavigation()->getCompass());
}
MenuCalibrateCompass::~MenuCalibrateCompass() {
delete this->caliCompass;
this->manualControl->setCalibrateCompass();
}
void MenuCalibrateCompass::printPage() const {
String lineOne = "";
String lineTwo = "";
switch (this->getCurrentPage()) {
case 0:
lineOne = "-Ready to drive-";
lineTwo = "Compass Mode";
break;
case 1:
lineOne = "Azimuth:";
lineTwo.concat(this->driveManager->getNavigation()->getAzimuth());
break;
case 2:
switch (this->caliCompass->getState()) {
case CalibrateCompass::State::Ready :
lineOne = "Start compass";
lineTwo = "calibration";
break;
case CalibrateCompass::State::Calibrating :
lineOne = "Calibrating...";
lineTwo = "Move around";
break;
case CalibrateCompass::State::Finished:
lineOne = "Calibration";
lineTwo = "finished";
break;
default:
break;
}
break;
case 3:
lineOne = "Save compass";
lineTwo = "data in flash";
break;
case 4:
lineOne = "Load data";
lineTwo = "from flash";
break;
case 5:
lineOne = "Remove";
lineTwo = "calibration data";
break;
case 6:
lineOne = "Use current";
lineTwo = "calibration data";
break;
case 7:
lineOne = "X min: ";
lineOne.concat(this->caliCompass->getCallibrationData().data[0][0]);
lineTwo = "X max: ";
lineTwo.concat(this->caliCompass->getCallibrationData().data[0][1]);
break;
case 8:
lineOne = "Y min: ";
lineOne.concat(this->caliCompass->getCallibrationData().data[1][0]);
lineTwo = "Y max: ";
lineTwo.concat(this->caliCompass->getCallibrationData().data[1][1]);
break;
case 9:
lineOne = "Z min: ";
lineOne.concat(this->caliCompass->getCallibrationData().data[2][0]);
lineTwo = "Z max: ";
lineTwo.concat(this->caliCompass->getCallibrationData().data[2][1]);
break;
default:
this->printDefault();
return;
}
this->print(lineOne, lineTwo);
}
void MenuCalibrateCompass::init() {
this->firstPrint = false;
this->driveManager->changeModus(Modi::ManualControl);
this->manualControl = (ManualControl*) this->driveManager->getDriveModiPtr();
this->setCountPages(10);
this->updateDelay = 500;
}
void MenuCalibrateCompass::runCommand() const {
switch (this->getCurrentPage()) {
case 2:
switch (this->caliCompass->getState()) {
case CalibrateCompass::State::Ready :
this->manualControl->setCalibrateCompass(this->caliCompass);
this->caliCompass->start();
break;
case CalibrateCompass::State::Finished:
this->manualControl->setCalibrateCompass();
this->caliCompass->useData();
this->caliCompass->reset();
break;
default:
break;
}
break;
case 3:
this->caliCompass->saveData();
break;
case 4:
this->caliCompass->loadData();
break;
case 5:
this->caliCompass->removeCalibration();
break;
case 6:
this->caliCompass->useData();
break;
default:
break;
}
}
@@ -0,0 +1,51 @@
/**
* @file menuCalibrateCompass.h
* @author Alexander Klein (alex@kleiax.de)
* @brief Contains a class to print information about the class ManualControl
* @version 0.1
* @date 2022-01-20
*
* @copyright Copyright (c) 2022
*
*/
#ifndef MENU_CALIBRATE_COMPASS_H
#define MENU_CALIBRATE_COMPASS_H
#include "SpecialMenus/driveModi/menuDriveMode.h"
#include "calibrateCompass.h"
/**
* @brief A class to print informations about the class ManualControl
*
*/
class MenuCalibrateCompass : public MenuDriveMode {
public:
/**
* @brief Construct a new Menu Manual Control object
*
* @param driveManager
*/
MenuCalibrateCompass(DriveManager* driveManager);
~MenuCalibrateCompass();
/**
* @brief Prints the Information to display and console
*
* The informations are only printed to the display if it
* set.
*
* Changes the DriveModi to Autopilot if it is the first time called.
*/
void printPage() const override;
protected:
void init() override;
void runCommand() const override;
private:
ManualControl* manualControl;
CalibrateCompass* caliCompass;
};
#endif // MENU_CALIBRATE_COMPASS_H
@@ -11,12 +11,10 @@
#include "menuManualDrive.h"
MenuManualControl::MenuManualControl(DriveManager* driveManager) : MenuDriveMode(driveManager) {
this->caliCompass = new CalibrateCompass(this->driveManager->getNavigation()->getCompass());
}
MenuManualControl::~MenuManualControl() {
delete this->caliCompass;
this->manualControl->setCalibrateCompass();
}
void MenuManualControl::printPage() const {
@@ -61,32 +59,10 @@ void MenuManualControl::printPage() const {
lineOne = "Dutycycle Right:";
lineTwo.concat(this->manualControl->getDutycycleRight());
break;
case 7:
switch (this->caliCompass->getState()) {
case CalibrateCompass::State::Ready :
lineOne = "Start compass";
lineTwo = "calibration";
break;
case CalibrateCompass::State::Calibrating :
lineOne = "Calibrating...";
lineTwo = "Move around";
break;
case CalibrateCompass::State::Finished:
lineOne = "Calibration";
lineTwo = "finished";
break;
default:
break;
}
break;
case 8:
lineOne = "Save compass";
lineTwo = "data in flash";
lineOne = "Azimuth:";
lineTwo.concat(this->driveManager->getNavigation()->getAzimuth());
break;
default:
@@ -101,7 +77,7 @@ void MenuManualControl::init() {
this->firstPrint = false;
this->driveManager->changeModus(Modi::ManualControl);
this->manualControl = (ManualControl*) this->driveManager->getDriveModiPtr();
this->setCountPages(9);
this->setCountPages(8);
this->updateDelay = 500;
}
@@ -123,27 +99,6 @@ void MenuManualControl::runCommand() const {
case 4:
this->manualControl->increaseMaxRotation();
break;
case 7:
switch (this->caliCompass->getState()) {
case CalibrateCompass::State::Ready :
this->manualControl->setCalibrateCompass(this->caliCompass);
this->caliCompass->start();
break;
case CalibrateCompass::State::Finished:
this->manualControl->setCalibrateCompass();
this->caliCompass->useData();
this->caliCompass->reset();
break;
default:
break;
}
break;
case 8:
this->caliCompass->saveData();
default:
break;
+1 -1
View File
@@ -100,7 +100,7 @@ void Autopilot::init() {
this->routeInfo = this->navigation->getRouteInfo();
this->navigation->getNTRIPClient()->setAutoReconnect(true);
this->lastOrderStatus = this->navigation->getCourseCorrection(this->courseCorrection);
this->lastOrderStatus = this->navigation->getCourseCorrection(this->courseCorrection, true);
this->courseCorrection.correction = 0;
this->courseCorrection.distance = 0;
@@ -23,7 +23,7 @@ ManualControl::~ManualControl() {
}
void ManualControl::loop() {
if (caliCompass)
if (this->caliCompass)
this->caliCompass->loop();
if (millis() - this->lastMillis < delay) {
+8 -3
View File
@@ -38,6 +38,7 @@
#include "SpecialMenus/driveModi/CaptureRoute/menuCaptureRoute.h"
#include "SpecialMenus/driveModi/Autopilot/menuAutopilot.h"
#include "SpecialMenus/driveModi/TestMode/menuTestMode.h"
#include "SpecialMenus/driveModi/CalibrateCompass/menuCalibrateCompass.h"
#include "SpecialMenus/Systeminformation/menuSysteminformation.h"
#include "SpecialMenus/PID/menuPidSettings.h"
#include "SpecialMenus/Route/menuRoute.h"
@@ -208,6 +209,7 @@ void makeMenu() {
MenuCaptureRoute* cap_m = new MenuCaptureRoute(driveManager);
MenuAutopilot* auto_m = new MenuAutopilot(driveManager);
MenuTestMode* testM_m = new MenuTestMode(driveManager);
MenuCalibrateCompass* comp_m = new MenuCalibrateCompass(driveManager);
MenuGPS* gps_m = new MenuGPS(driveManager);
MenuSysteminformation* sys_m = new MenuSysteminformation(mainBattery);
MenuRoute* rout_m = new MenuRoute(driveManager->getNavigation()->getRoute());
@@ -222,6 +224,7 @@ void makeMenu() {
cap_m->setLcd(lcdWrapper);
auto_m->setLcd(lcdWrapper);
testM_m->setLcd(lcdWrapper);
comp_m->setLcd(lcdWrapper);
gps_m->setLcd(lcdWrapper);
gps_m->setUpdateDelay(1000);
sys_m->setLcd(lcdWrapper);
@@ -250,11 +253,13 @@ void makeMenu() {
MenuAction* consolControl_e = new MenuAction("Consol Control", dummy);
MenuAction* manualControl_e = new MenuAction("Manual Control", man_m);
MenuAction* testMode_e = new MenuAction("Test Mode", testM_m);
mode_m->addEntry(autopilot_e);
mode_m->addEntry(captureRoute_e);
MenuAction* caliComp_e = new MenuAction("Gauge Compass", comp_m);
mode_m->addEntry(manualControl_e);
mode_m->addEntry(consolControl_e);
mode_m->addEntry(captureRoute_e);
mode_m->addEntry(autopilot_e);
mode_m->addEntry(caliComp_e);
mode_m->addEntry(testMode_e);
mode_m->addEntry(consolControl_e);
// Entry for the PID Menu
MenuAction* pidl_e = new MenuAction("Left", pidl_m);