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/bmsturnonchargeaction.h
actions/bmsturnondischargeaction.h
actions/defaultmodeapplycurrspeedaction.h
actions/dummyaction.h
actions/erasenvsaction.h
actions/loadsettingsaction.h
@ -25,6 +24,7 @@ set(headers
actions/savesettingsaction.h
actions/setvalueaction.h
actions/switchscreenaction.h
actions/tempomatmodeapplycurrentpeedaction.h
actions/toggleboolaction.h
actions/wifidisconnectaction.h
actions/wifienableipv6action.h

View File

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

View File

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

View File

@ -11,8 +11,6 @@
#include "icons/back.h"
#include "texts.h"
#include "accessors/settingsaccessors.h"
#include "accessors/globalaccessors.h"
#include "actions/defaultmodeapplycurrspeedaction.h"
// forward declares
namespace {
@ -85,14 +83,6 @@ using DefaultModeBrems2WertChangeDisplay = makeComponent<
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeCruiseMotTgtChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_NCRUISEMOTTGT>,
DefaultModenCruiseMotTgtAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
class DefaultModeSettingsMenu :
public MenuDisplay,
public StaticText<TEXT_DEFAULTMODESETTIGNS>,
@ -102,9 +92,6 @@ public:
DefaultModeSettingsMenu()
{
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_SQUAREBREMS>, ToggleBoolAction, CheckboxIcon, DefaultModeSquareBremsAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLESMOOTHING>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingAccessor>>();

View File

@ -44,7 +44,7 @@ public:
SelectModeMenu()
{
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>>>>();
#ifdef FEATURE_GAMETRAK
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAMETRAK>, MultiAction<SetGametrakModeAction, SwitchScreenAction<MainMenu>>>>();

View File

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

View File

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

View File

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

View File

@ -147,9 +147,6 @@ constexpr char TEXT_DYNAMICMENU[] = "Dynamic menu";
//DefaultModeSettingsMenu
//constexpr char TEXT_DEFAULTMODESETTINGS[] = "Default mode settings";
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_SQUAREBREMS[] = "Square brems";
constexpr char TEXT_ENABLESMOOTHING[] = "Enable smoothing";
@ -235,6 +232,8 @@ constexpr char TEXT_MOSFET2[] = "Mosfet2";
//TempomatModeSettingsMenu
//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_BACK[] = "Back";

View File

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

View File

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