refactore

This commit is contained in:
2023-09-03 12:36:16 +02:00
parent faaa3603a7
commit 5f650982a7
30 changed files with 578 additions and 430 deletions
+2 -2
View File
@@ -26,8 +26,8 @@ void DirectionChangeSignal::action() {
}
Autopilot::Autopilot(MoveControl* moveControl, const ControlPadInput *input, Navigation* navigation)
: ManualControl(moveControl, input) {
Autopilot::Autopilot(DriveModiParams params, Navigation* navigation)
: ManualControl(params) {
this->setInputMode(ManualControl::InputMode::Digital);
this->directionChangeSignal = new DirectionChangeSignal(navigation);
this->setDirectionChangeCallback(this->directionChangeSignal);
+1 -2
View File
@@ -14,7 +14,6 @@
#include "navigation.h"
#include "moveControl.h"
#include "driveModi/Modi/ManualControl/manualControl.h"
class DirectionChangeSignal : public DirectionChangeWrapper {
@@ -56,7 +55,7 @@ class Autopilot : public ManualControl {
* @param moveControl for ManualControl
* @param navigation for route instructions
*/
Autopilot(MoveControl* moveControl, const ControlPadInput *input, Navigation* navigation);
Autopilot(DriveModiParams params, Navigation* navigation);
/**
* @brief Destroy the Autopilot object
@@ -0,0 +1,24 @@
/**
* @file calibrateCompassM.cpp
* @author Alexander Klein (alex@kleiax.de)
* @brief
* @version 0.1
* @date 2023-09-03
*
* @copyright Copyright (c) 2023
*
*/
#include "calibrateCompassM.h"
CalibrateCompassM::CalibrateCompassM(DriveModiParams params) : ManualControl(params) {}
void CalibrateCompassM::setCalibrateCompass(CalibrateCompass *caliCompass) {
if (caliCompass) {
this->caliCompass = caliCompass;
this->addChildComponent(this->caliCompass);
} else if (this->caliCompass) {
this->removeChildComponent(this->caliCompass);
this->caliCompass = caliCompass;
}
}
@@ -0,0 +1,29 @@
/**
* @file calibrateCompassM.h
* @author Alexander Klein (alex@kleiax.de)
* @brief
* @version 0.1
* @date 2023-09-03
*
* @copyright Copyright (c) 2023
*
*/
#ifndef CALIBRATE_COMPASS_M_H
#define CALIBRATE_COMPASS_M_H
#include "calibrateCompass.h"
#include "driveModi/Modi/ManualControl/manualControl.h"
class CalibrateCompassM : public ManualControl {
public:
CalibrateCompassM(DriveModiParams params);
void setCalibrateCompass(CalibrateCompass* caliCompass = nullptr);
private:
CalibrateCompass* caliCompass = nullptr;
};
#endif //CALIBRATE_COMPASS_M_H
@@ -11,8 +11,8 @@
#include "driveModi/Modi/CaptureRoute/captureRoute.h"
CaptureRoute::CaptureRoute(MoveControl* moveControl, const ControlPadInput *input, Navigation* navigation)
: ManualControl(moveControl, input) {
CaptureRoute::CaptureRoute(DriveModiParams params, Navigation* navigation)
: ManualControl(params) {
this->navigation = navigation;
this->navigation->getRoute()->clear();
this->navigation->getNTRIPClient()->setAutoReconnect(true);
@@ -33,7 +33,7 @@ class CaptureRoute : public ManualControl {
* @param moveControl for ManualControl
* @param navigation to add Points
*/
CaptureRoute(MoveControl* moveControl, const ControlPadInput *input, Navigation* navigation);
CaptureRoute(DriveModiParams params, Navigation* navigation);
/**
* @brief Destroy the Capture Route object
@@ -1,13 +0,0 @@
/**
* @file consolControl.cpp
* @author Alexander Klein (alex@kleiax.de)
* @brief
* @version 0.1
* @date 2022-02-15
*
* @copyright Copyright (c) 2022
*
*/
#include "consolControl.h"
@@ -1,20 +0,0 @@
/**
* @file consolControl.h
* @author Alexander Klein (alex@kleiax.de)
* @brief
* @version 0.1
* @date 2022-02-15
*
* @copyright Copyright (c) 2022
*
*/
#ifndef CONSOL_CONTROL_H
#define CONSOL_CONTROL_H
#include "driveModi/driveModi.h"
class ConsolControl : DriveModi{
};
#endif // CONSOL_CONTROL_H
@@ -10,15 +10,6 @@
*/
#include "manualControl.h"
ManualControl::ManualControl(MoveControl* moveControl, const ControlPadInput *input)
: DriveModi(moveControl) {
this->input = input;
}
ManualControl::~ManualControl() {
}
void ManualControl::run() {
switch (this->inputMode) {
case InputMode::Analog :
@@ -34,16 +25,6 @@ void ManualControl::run() {
}
}
void ManualControl::setCalibrateCompass(CalibrateCompass *caliCompass) {
if (caliCompass) {
this->caliCompass = caliCompass;
this->addChildComponent(this->caliCompass);
} else if (this->caliCompass) {
this->removeChildComponent(this->caliCompass);
this->caliCompass = caliCompass;
}
}
void ManualControl::switchInputMode() {
this->inputMode = (this->inputMode == InputMode::Analog) ? InputMode::Digital : InputMode::Analog;
}
@@ -51,7 +32,7 @@ void ManualControl::switchInputMode() {
void ManualControl::analogControl() {
// Have to be int16_t to avoid overflow (int8_t = 255 - 127 = -128)
int16_t x = this->input->x - 127;
int16_t y = this->input->y - 127;
int16_t y = this-> input->y - 127;
// static int counter = 0;
// if (counter % 60 == 0) {
@@ -11,10 +11,7 @@
#ifndef MANUAL_CONTROL_H
#define MANUAL_CONTROL_H
#include "moveControl.h"
#include "driveModi/driveModi.h"
#include "controlPadInput.h"
#include "calibrateCompass.h"
class DirectionChangeWrapper {
public:
@@ -36,10 +33,7 @@ class ManualControl : public DriveModi {
Digital
};
ManualControl(MoveControl *moveControl, const ControlPadInput *input);
~ManualControl();
void setCalibrateCompass(CalibrateCompass* caliCompass = nullptr);
ManualControl(DriveModiParams params) : DriveModi(params){};
void switchInputMode();
void setInputMode(InputMode mode) { this->inputMode = mode; }
@@ -51,14 +45,12 @@ class ManualControl : public DriveModi {
protected:
void run() override;
const ControlPadInput* input;
private:
void analogControl();
void digitalControl();
bool lastLoopTurned = false;
CalibrateCompass* caliCompass = nullptr;
DirectionChangeWrapper* directionChangeWrapper = nullptr;
InputMode inputMode = InputMode::Analog;
};
View File
+2 -2
View File
@@ -10,8 +10,8 @@
*/
#include "testMode.h"
TestMode::TestMode(MoveControl *moveControl, Navigation* navigation)
: DriveModi(moveControl) {
TestMode::TestMode(DriveModiParams params, Navigation* navigation)
: DriveModi(params) {
this->navigation = navigation;
}
+1 -1
View File
@@ -44,7 +44,7 @@ class TestMode : public DriveModi {
* @param moveControl
* @param navigation
*/
TestMode(MoveControl *moveControl, Navigation* navigation);
TestMode(DriveModiParams params, Navigation* navigation);
~TestMode();
bool drive(int16_t cm = 0, int16_t degree = 0);
+23 -28
View File
@@ -11,33 +11,22 @@
#include "driveModi/driveManager.h"
Modi& operator++(Modi& m, int) {
return m = (m == Modi::TestMode) ? Modi::Off : static_cast<Modi>(static_cast<int>(m)+1);
DriveManager::DriveManager(MoveControl *moveControl, SensorData* sensorData, ControlPadInput *input, bool wifi) {
this->driveModiParams.input = input;
this->driveModiParams.moveControl = moveControl;
this->driveModiParams.sensorData = sensorData;
this->init(wifi);
}
DriveManager::DriveManager(MoveControl *moveControl, SPIClass *spiPort, const ControlPadInput *input, bool wifi) {
this->moveControl = moveControl;
this->input = input;
this->spiPort = spiPort;
this->navigation = new Navigation(spiPort, PinNumbers::gnssSpiCs);
if (wifi)
this->navigation->initNtrip(NTRIP_HOST, NTRIP_PORT, NTRIP_MOUNT_POINT, NTRIP_USER, NTRIP_PASSWORD);
DriveManager::DriveManager(DriveModiParams params, bool wifi){
this->driveModiParams = params;
this->addChildComponent(this->moveControl);
this->addChildComponent(this->navigation);
this->activateOnlyChilds();
this->init(wifi);
}
DriveManager::~DriveManager() {
delete this->navigation;
delete this->spiPort;
}
void DriveManager::run() {}
void DriveManager::nextModus() {
changeModus(this->currentModus++);
}
void DriveManager::changeModus(Modi modus) {
@@ -56,26 +45,22 @@ void DriveManager::changeModus(Modi modus) {
break;
case Modi::ManualControl: {
this->currentModusPtr = new ManualControl(this->moveControl, this->input);
this->currentModusPtr = new ManualControl(this->driveModiParams);
}
break;
case Modi::CaptureRoute: {
this->currentModusPtr = new CaptureRoute(this->moveControl, this->input, this->navigation);
this->currentModusPtr = new CaptureRoute(this->driveModiParams, this->navigation);
}
break;
case Modi::Autopilot: {
this->currentModusPtr = new Autopilot(this->moveControl, this->input, this->navigation);
this->currentModusPtr = new Autopilot(this->driveModiParams, this->navigation);
}
break;
case Modi::ConsolControl:
this->currentModusPtr = nullptr;
break;
case Modi::TestMode: {
this->currentModusPtr = new TestMode(this->moveControl, this->navigation);
this->currentModusPtr = new TestMode(driveModiParams, this->navigation);
}
break;
@@ -88,3 +73,13 @@ void DriveManager::changeModus(Modi modus) {
this->addChildComponent(this->currentModusPtr);
}
void DriveManager::init(bool wifi) {
this->navigation = new Navigation();
if (wifi)
this->navigation->initNtrip(NTRIP_HOST, NTRIP_PORT, NTRIP_MOUNT_POINT, NTRIP_USER, NTRIP_PASSWORD);
this->addChildComponent(this->driveModiParams.moveControl);
this->addChildComponent(this->navigation);
this->activateOnlyChilds();
}
+16 -3
View File
@@ -1,9 +1,17 @@
#include "driveModi.h"
DriveModi::DriveModi(MoveControl* moveControl) {
DriveModi::DriveModi(MoveControl* moveControl, ControlPadInput* input, SensorData* sensorData) {
this->moveControl = moveControl;
this->moveControl->setDrivingStatus(MoveControl::Status::Drive);
this->loopDelay = 40;
this->input = input;
this->sensorData = sensorData;
this->init();
}
DriveModi::DriveModi(DriveModiParams params){
this->moveControl = params.moveControl;
this->input = params.input;
this->sensorData = params.sensorData;
this->init();
}
DriveModi::~DriveModi() {
@@ -11,3 +19,8 @@ DriveModi::~DriveModi() {
this->moveControl->setRotationSpeed(0);
this->moveControl->setDrivingStatus(MoveControl::Status::Stop);
}
void DriveModi::init() {
this->moveControl->setDrivingStatus(MoveControl::Status::Drive);
this->loopDelay = 40;
}
+17 -2
View File
@@ -14,6 +14,14 @@
#include "component.h"
#include "moveControl.h"
#include "controlPadInput.h"
#include "sensorData.h"
struct DriveModiParams {
MoveControl* moveControl;
ControlPadInput* input;
SensorData* sensorData;
};
/**
* @brief Baseclass to build DriveModi
@@ -23,9 +31,12 @@
*/
class DriveModi : public Component {
public:
DriveModi(MoveControl* moveControl);
DriveModi(MoveControl* moveControl, ControlPadInput* input, SensorData* sensorData);
DriveModi(DriveModiParams);
virtual ~DriveModi();
SensorData getSensorData() const { return this->sensorData; }
/**
* @brief Set the max speed
*
@@ -48,8 +59,12 @@ class DriveModi : public Component {
protected:
MoveControl *moveControl;
ControlPadInput* input;
SensorData* sensorData;
double maxForwardSpeed = 1;
double maxRotationSpeed = 7;
private:
void init();
};
#endif // DRIVEMODI_H
+10 -1
View File
@@ -31,6 +31,8 @@
#include "network.h"
#include "debugMqtt.h"
#include "battery.h"
#include "sensors.h"
#include "sensorData.h"
#include "debugTimes.h"
#include "controlPad.h"
@@ -55,6 +57,8 @@ OutputBuf* outputBuf;
DebugMqtt* debugMqtt = nullptr;
Battery* mainBattery;
SPIClass* spiPort;
Sensors* sensors;
SensorData* sensorData;
ControlPad* controlPad;
bool wifiIsActive;
@@ -115,7 +119,11 @@ void setup() {
std::cout << "Build timestamp: " << BUILD_TIMESTAMP << std::endl;
std::cout << "All actions from the main program run on Core -> " << xPortGetCoreID() << std::endl;
driveManager = new DriveManager(&moveController, spiPort, controlPad->getControlPadDataPtr(), wifiIsActive);
sensors = new Sensors();
sensors->enableGnss(spiPort, PinNumbers::gnssSpiCs);
sensors->enableCompass();
sensorData = sensors->getSensorData();
driveManager = new DriveManager(&moveController, sensorData, controlPad->getControlPadDataPtr(), wifiIsActive);
outputBuf->activateMqtt(true);
@@ -142,6 +150,7 @@ void loop() {
#endif //MQTT
wifiTime.stopConsol("WiFi-Time", 10);
}
sensors->loop();
driveManager->loop();
controlPad->loop();
main_m->update();