tempomat improvements

This commit is contained in:
2021-07-20 20:44:14 +02:00
parent 455f98a4a0
commit 5318554786
12 changed files with 51 additions and 47 deletions

View File

@@ -15,7 +15,6 @@ set(headers
actions/bmsturnoffdischargeaction.h actions/bmsturnoffdischargeaction.h
actions/bmsturnonchargeaction.h actions/bmsturnonchargeaction.h
actions/bmsturnondischargeaction.h actions/bmsturnondischargeaction.h
actions/defaultmodeapplycurrspeedaction.h
actions/dummyaction.h actions/dummyaction.h
actions/erasenvsaction.h actions/erasenvsaction.h
actions/loadsettingsaction.h actions/loadsettingsaction.h
@@ -25,6 +24,7 @@ set(headers
actions/savesettingsaction.h actions/savesettingsaction.h
actions/setvalueaction.h actions/setvalueaction.h
actions/switchscreenaction.h actions/switchscreenaction.h
actions/tempomatmodeapplycurrentpeedaction.h
actions/toggleboolaction.h actions/toggleboolaction.h
actions/wifidisconnectaction.h actions/wifidisconnectaction.h
actions/wifienableipv6action.h actions/wifienableipv6action.h

View File

@@ -3,7 +3,7 @@
// local includes // local includes
#include "accessorinterface.h" #include "accessorinterface.h"
#include "globals.h" #include "globals.h"
#include "modes/defaultmode.h" #include "modes/tempomatmode.h"
namespace { namespace {
@@ -11,7 +11,6 @@ struct AvgSpeedAccessor : public RefAccessor<float> { float &getRef() const over
struct AvgSpeedKmhAccessor : public RefAccessor<float> { float &getRef() const override { return avgSpeedKmh; } }; struct AvgSpeedKmhAccessor : public RefAccessor<float> { float &getRef() const override { return avgSpeedKmh; } };
struct SumCurrentAccessor : public RefAccessor<float> { float &getRef() const override { return sumCurrent; } }; struct SumCurrentAccessor : public RefAccessor<float> { float &getRef() const override { return sumCurrent; } };
struct DefaultModeCruiseCtrlEnaAccessor : public RefAccessor<bool> { bool &getRef() const override { return modes::defaultMode.cruiseCtrlEna; } }; struct TempomatModeCruiseMotTgtAccessor : public RefAccessor<int16_t> { int16_t &getRef() const override { return modes::tempomatMode.nCruiseMotTgt; } };
struct DefaultModenCruiseMotTgtAccessor : public RefAccessor<int16_t> { int16_t &getRef() const override { return modes::defaultMode.nCruiseMotTgt; } };
} // namespace } // namespace

View File

@@ -3,15 +3,15 @@
// local includes // local includes
#include "actioninterface.h" #include "actioninterface.h"
#include "globals.h" #include "globals.h"
#include "modes/defaultmode.h" #include "modes/tempomatmode.h"
namespace { namespace {
class DefaultModeApplyCurrentSpeedAction : public virtual ActionInterface class TempomatModeApplyCurrentSpeedAction : public virtual ActionInterface
{ {
public: public:
void triggered() override void triggered() override
{ {
modes::defaultMode.nCruiseMotTgt = avgSpeed; modes::tempomatMode.nCruiseMotTgt = avgSpeed;
} }
}; };
} // namespace } // namespace

View File

@@ -11,8 +11,6 @@
#include "icons/back.h" #include "icons/back.h"
#include "texts.h" #include "texts.h"
#include "accessors/settingsaccessors.h" #include "accessors/settingsaccessors.h"
#include "accessors/globalaccessors.h"
#include "actions/defaultmodeapplycurrspeedaction.h"
// forward declares // forward declares
namespace { namespace {
@@ -85,14 +83,6 @@ using DefaultModeBrems2WertChangeDisplay = makeComponent<
SwitchScreenAction<DefaultModeSettingsMenu> SwitchScreenAction<DefaultModeSettingsMenu>
>; >;
using DefaultModeCruiseMotTgtChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_NCRUISEMOTTGT>,
DefaultModenCruiseMotTgtAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
class DefaultModeSettingsMenu : class DefaultModeSettingsMenu :
public MenuDisplay, public MenuDisplay,
public StaticText<TEXT_DEFAULTMODESETTIGNS>, public StaticText<TEXT_DEFAULTMODESETTIGNS>,
@@ -102,9 +92,6 @@ public:
DefaultModeSettingsMenu() DefaultModeSettingsMenu()
{ {
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<DefaultModeModelModeChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<DefaultModeModelModeChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CRUISECTRLENA>, ToggleBoolAction, CheckboxIcon, DefaultModeCruiseCtrlEnaAccessor>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_NCRUISEMOTTGT, DefaultModenCruiseMotTgtAccessor>, SwitchScreenAction<DefaultModeCruiseMotTgtChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_APPLYCURRSPEED, AvgSpeedAccessor>, DefaultModeApplyCurrentSpeedAction>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREGAS>, ToggleBoolAction, CheckboxIcon, DefaultModeSquareGasAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREGAS>, ToggleBoolAction, CheckboxIcon, DefaultModeSquareGasAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREBREMS>, ToggleBoolAction, CheckboxIcon, DefaultModeSquareBremsAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREBREMS>, ToggleBoolAction, CheckboxIcon, DefaultModeSquareBremsAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLESMOOTHING>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLESMOOTHING>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingAccessor>>();

View File

@@ -44,7 +44,7 @@ public:
SelectModeMenu() SelectModeMenu()
{ {
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEFAULT>, MultiAction<SetDefaultModeAction, SwitchScreenAction<MainMenu>>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEFAULT>, MultiAction<SetDefaultModeAction, SwitchScreenAction<MainMenu>>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_TEMPOMAT>, MultiAction<SetTempomatModeAction, SwitchScreenAction<MainMenu>>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_TEMPOMAT, AvgSpeedAccessor>, MultiAction<SetTempomatModeAction, SwitchScreenAction<MainMenu>>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LARSM>, MultiAction<SetLarsmModeAction, SwitchScreenAction<MainMenu>>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LARSM>, MultiAction<SetLarsmModeAction, SwitchScreenAction<MainMenu>>>>();
#ifdef FEATURE_GAMETRAK #ifdef FEATURE_GAMETRAK
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAMETRAK>, MultiAction<SetGametrakModeAction, SwitchScreenAction<MainMenu>>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAMETRAK>, MultiAction<SetGametrakModeAction, SwitchScreenAction<MainMenu>>>>();

View File

@@ -9,6 +9,8 @@
#include "icons/back.h" #include "icons/back.h"
#include "texts.h" #include "texts.h"
#include "accessors/settingsaccessors.h" #include "accessors/settingsaccessors.h"
#include "accessors/globalaccessors.h"
#include "actions/tempomatmodeapplycurrentpeedaction.h"
// forward declares // forward declares
namespace { namespace {
@@ -17,6 +19,14 @@ class ModesSettingsMenu;
} // namespace } // namespace
namespace { namespace {
using DefaultModeCruiseMotTgtChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_NCRUISEMOTTGT>,
TempomatModeCruiseMotTgtAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using TempomatModeModelModeChangeScreen = makeComponent< using TempomatModeModelModeChangeScreen = makeComponent<
ChangeValueDisplay<UnifiedModelMode>, ChangeValueDisplay<UnifiedModelMode>,
StaticText<TEXT_MODELMODE>, StaticText<TEXT_MODELMODE>,
@@ -33,6 +43,8 @@ class TempomatModeSettingsMenu :
public: public:
TempomatModeSettingsMenu() TempomatModeSettingsMenu()
{ {
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_APPLY, AvgSpeedAccessor>, TempomatModeApplyCurrentSpeedAction>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_NCRUISEMOTTGT, TempomatModeCruiseMotTgtAccessor>, SwitchScreenAction<TempomatModeModelModeChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<TempomatModeModelModeChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<TempomatModeModelModeChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&icons::back>>>();
} }

View File

@@ -24,9 +24,6 @@ public:
bool waitForGasLoslass{false}; bool waitForGasLoslass{false};
bool waitForBremsLoslass{false}; bool waitForBremsLoslass{false};
bool cruiseCtrlEna{false};
int16_t nCruiseMotTgt{0};
private: private:
espchrono::millis_clock::time_point lastTime{espchrono::millis_clock::now()}; espchrono::millis_clock::time_point lastTime{espchrono::millis_clock::now()};
float lastPwm{0}; float lastPwm{0};
@@ -39,8 +36,6 @@ DefaultMode defaultMode;
void DefaultMode::start() void DefaultMode::start()
{ {
Base::start(); Base::start();
cruiseCtrlEna = false;
nCruiseMotTgt = 0;
} }
void DefaultMode::update() void DefaultMode::update()
@@ -115,16 +110,16 @@ void DefaultMode::update()
motor.ctrlTyp = pair.first; motor.ctrlTyp = pair.first;
motor.ctrlMod = pair.second; motor.ctrlMod = pair.second;
motor.pwm = pwm / 100. * settings.defaultMode.frontPercentage; motor.pwm = pwm / 100. * settings.defaultMode.frontPercentage;
motor.cruiseCtrlEna = cruiseCtrlEna; motor.cruiseCtrlEna = false;
motor.nCruiseMotTgt = nCruiseMotTgt; motor.nCruiseMotTgt = 0;
} }
for (bobbycar::protocol::serial::MotorState &motor : motorsInController(controllers.back)) for (bobbycar::protocol::serial::MotorState &motor : motorsInController(controllers.back))
{ {
motor.ctrlTyp = pair.first; motor.ctrlTyp = pair.first;
motor.ctrlMod = pair.second; motor.ctrlMod = pair.second;
motor.pwm = pwm / 100. * settings.defaultMode.backPercentage; motor.pwm = pwm / 100. * settings.defaultMode.backPercentage;
motor.cruiseCtrlEna = cruiseCtrlEna; motor.cruiseCtrlEna = false;
motor.nCruiseMotTgt = nCruiseMotTgt; motor.nCruiseMotTgt = 0;
} }
} }

View File

@@ -20,7 +20,7 @@ public:
const char *displayName() const override { return "Tempomat"; } const char *displayName() const override { return "Tempomat"; }
int16_t pwm; int16_t nCruiseMotTgt;
}; };
namespace modes { namespace modes {
@@ -30,7 +30,7 @@ TempomatMode tempomatMode;
void TempomatMode::start() void TempomatMode::start()
{ {
Base::start(); Base::start();
pwm = 0; nCruiseMotTgt = avgSpeed;
} }
void TempomatMode::update() void TempomatMode::update()
@@ -52,23 +52,23 @@ void TempomatMode::update()
{ {
if (*gas > 500. && *brems > 500.) if (*gas > 500. && *brems > 500.)
{ {
pwm = 0; nCruiseMotTgt = 0;
modes::defaultMode.waitForGasLoslass = true; modes::defaultMode.waitForGasLoslass = true;
modes::defaultMode.waitForBremsLoslass = true; modes::defaultMode.waitForBremsLoslass = true;
currentMode = &modes::defaultMode; currentMode = &modes::defaultMode;
return; return;
} }
pwm += (*gas/1000.) - (*brems/1000.); nCruiseMotTgt += (*gas/1000.) - (*brems/1000.);
for (bobbycar::protocol::serial::MotorState &motor : motors()) for (bobbycar::protocol::serial::MotorState &motor : motors())
{ {
const auto pair = split(settings.tempomatMode.modelMode); const auto pair = split(settings.tempomatMode.modelMode);
motor.ctrlTyp = pair.first; motor.ctrlTyp = pair.first;
motor.ctrlMod = pair.second; motor.ctrlMod = pair.second;
motor.pwm = pwm; motor.pwm = 0;
motor.cruiseCtrlEna = false; motor.cruiseCtrlEna = true;
motor.nCruiseMotTgt = 0; motor.nCruiseMotTgt = nCruiseMotTgt;
} }
} }

View File

@@ -147,9 +147,6 @@ constexpr char TEXT_DYNAMICMENU[] = "Dynamic menu";
//DefaultModeSettingsMenu //DefaultModeSettingsMenu
//constexpr char TEXT_DEFAULTMODESETTINGS[] = "Default mode settings"; //constexpr char TEXT_DEFAULTMODESETTINGS[] = "Default mode settings";
constexpr char TEXT_MODELMODE[] = "Model mode"; constexpr char TEXT_MODELMODE[] = "Model mode";
constexpr char TEXT_CRUISECTRLENA[] = "Enable tempomat";
constexpr char TEXT_NCRUISEMOTTGT[] = "Tempomat";
constexpr char TEXT_APPLYCURRSPEED[] = "Apply";
constexpr char TEXT_SQUAREGAS[] = "Square gas"; constexpr char TEXT_SQUAREGAS[] = "Square gas";
constexpr char TEXT_SQUAREBREMS[] = "Square brems"; constexpr char TEXT_SQUAREBREMS[] = "Square brems";
constexpr char TEXT_ENABLESMOOTHING[] = "Enable smoothing"; constexpr char TEXT_ENABLESMOOTHING[] = "Enable smoothing";
@@ -235,6 +232,8 @@ constexpr char TEXT_MOSFET2[] = "Mosfet2";
//TempomatModeSettingsMenu //TempomatModeSettingsMenu
//constexpr char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings"; //constexpr char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings";
constexpr char TEXT_APPLY[] = "Apply";
constexpr char TEXT_NCRUISEMOTTGT[] = "nCruiseMotTgt";
//constexpr char TEXT_MODELMODE[] = "Model mode"; //constexpr char TEXT_MODELMODE[] = "Model mode";
//constexpr char TEXT_BACK[] = "Back"; //constexpr char TEXT_BACK[] = "Back";

View File

@@ -221,13 +221,25 @@ void fixCommonParams()
controllers.back.command.right.enable = settings.controllerHardware.enableBackRight; controllers.back.command.right.enable = settings.controllerHardware.enableBackRight;
if (settings.controllerHardware.invertFrontLeft) if (settings.controllerHardware.invertFrontLeft)
{
controllers.front.command.left.pwm = -controllers.front.command.left.pwm; controllers.front.command.left.pwm = -controllers.front.command.left.pwm;
controllers.front.command.left.nCruiseMotTgt = -controllers.front.command.left.nCruiseMotTgt;
}
if (settings.controllerHardware.invertFrontRight) if (settings.controllerHardware.invertFrontRight)
{
controllers.front.command.right.pwm = -controllers.front.command.right.pwm; controllers.front.command.right.pwm = -controllers.front.command.right.pwm;
controllers.front.command.right.nCruiseMotTgt = -controllers.front.command.right.nCruiseMotTgt;
}
if (settings.controllerHardware.invertBackLeft) if (settings.controllerHardware.invertBackLeft)
{
controllers.back.command.left.pwm = -controllers.back.command.left.pwm; controllers.back.command.left.pwm = -controllers.back.command.left.pwm;
controllers.back.command.left.nCruiseMotTgt = -controllers.back.command.left.nCruiseMotTgt;
}
if (settings.controllerHardware.invertBackRight) if (settings.controllerHardware.invertBackRight)
{
controllers.back.command.right.pwm = -controllers.back.command.right.pwm; controllers.back.command.right.pwm = -controllers.back.command.right.pwm;
controllers.back.command.right.nCruiseMotTgt = -controllers.back.command.right.nCruiseMotTgt;
}
} }
void sendCommands() void sendCommands()

View File

@@ -25,12 +25,12 @@ wifi_stack::config wifi_create_config()
wifi_stack::wifi_entry { .ssid = {}, .key = {} } wifi_stack::wifi_entry { .ssid = {}, .key = {} }
}, },
.sta_ip = { .sta_ip = {
.dhcpEnabled = true, .staticIpEnabled = false,
.staticIp = {}, // .staticIp = {},
.staticGateway = {}, // .staticGateway = {},
.staticSubnet = {}, // .staticSubnet = {},
.staticDns1 = {}, // .staticDns1 = {},
.staticDns2 = {} // .staticDns2 = {}
}, },
.ap = { .ap = {
{ {