Added motortest mode
This commit is contained in:
@ -133,6 +133,7 @@ set(headers
|
|||||||
displays/menus/mosfetsmenu.h
|
displays/menus/mosfetsmenu.h
|
||||||
displays/menus/motorfeedbackdebugmenu.h
|
displays/menus/motorfeedbackdebugmenu.h
|
||||||
displays/menus/motorstatedebugmenu.h
|
displays/menus/motorstatedebugmenu.h
|
||||||
|
displays/menus/motortestmodesettingsmenu.h
|
||||||
displays/menus/otamenu.h
|
displays/menus/otamenu.h
|
||||||
displays/menus/selectotabuildmenu.h
|
displays/menus/selectotabuildmenu.h
|
||||||
displays/menus/presetsmenu.h
|
displays/menus/presetsmenu.h
|
||||||
@ -188,6 +189,7 @@ set(headers
|
|||||||
modes/larsmmode.h
|
modes/larsmmode.h
|
||||||
modes/remotecontrolmode.h
|
modes/remotecontrolmode.h
|
||||||
modes/tempomatmode.h
|
modes/tempomatmode.h
|
||||||
|
modes/motortestmode.h
|
||||||
)
|
)
|
||||||
|
|
||||||
set(sources
|
set(sources
|
||||||
@ -325,6 +327,7 @@ set(sources
|
|||||||
displays/menus/mosfetsmenu.cpp
|
displays/menus/mosfetsmenu.cpp
|
||||||
displays/menus/motorfeedbackdebugmenu.cpp
|
displays/menus/motorfeedbackdebugmenu.cpp
|
||||||
displays/menus/motorstatedebugmenu.cpp
|
displays/menus/motorstatedebugmenu.cpp
|
||||||
|
displays/menus/motortestmodesettingsmenu.cpp
|
||||||
displays/menus/otamenu.cpp
|
displays/menus/otamenu.cpp
|
||||||
displays/menus/selectotabuildmenu.cpp
|
displays/menus/selectotabuildmenu.cpp
|
||||||
displays/menus/statisticsmenu.cpp
|
displays/menus/statisticsmenu.cpp
|
||||||
@ -380,6 +383,7 @@ set(sources
|
|||||||
modes/larsmmode.cpp
|
modes/larsmmode.cpp
|
||||||
modes/remotecontrolmode.cpp
|
modes/remotecontrolmode.cpp
|
||||||
modes/tempomatmode.cpp
|
modes/tempomatmode.cpp
|
||||||
|
modes/motortestmode.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set(dependencies
|
set(dependencies
|
||||||
|
@ -159,6 +159,9 @@ struct LarsmModeModelModeAccessor : public RefAccessorSaveSettings<UnifiedModelM
|
|||||||
struct LarsmModeModeAccessor : public RefAccessorSaveSettings<LarsmModeMode> { LarsmModeMode &getRef() const override { return settings.larsmMode.mode; } };
|
struct LarsmModeModeAccessor : public RefAccessorSaveSettings<LarsmModeMode> { LarsmModeMode &getRef() const override { return settings.larsmMode.mode; } };
|
||||||
struct LarsmModeIterationsAccessor : public RefAccessorSaveSettings<uint8_t> { uint8_t &getRef() const override { return settings.larsmMode.iterations; } };
|
struct LarsmModeIterationsAccessor : public RefAccessorSaveSettings<uint8_t> { uint8_t &getRef() const override { return settings.larsmMode.iterations; } };
|
||||||
|
|
||||||
|
struct MotortestModeMultiplikatorAccessor : public RefAccessorSaveSettings<uint8_t> { uint8_t &getRef() const override { return settings.motortestMode.multiplikator; } };
|
||||||
|
struct MotortestMaxPwmAccessor : public RefAccessorSaveSettings<uint16_t> { uint16_t &getRef() const override { return settings.motortestMode.maxPwm; } };
|
||||||
|
|
||||||
#ifdef FEATURE_LEDSTRIP
|
#ifdef FEATURE_LEDSTRIP
|
||||||
struct EnableLedAnimationAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.ledstrip.enableLedAnimation; } };
|
struct EnableLedAnimationAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.ledstrip.enableLedAnimation; } };
|
||||||
struct EnableBrakeLightsAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.ledstrip.enableBrakeLights; } };
|
struct EnableBrakeLightsAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.ledstrip.enableBrakeLights; } };
|
||||||
|
@ -6,10 +6,12 @@
|
|||||||
#include "modes/tempomatmode.h"
|
#include "modes/tempomatmode.h"
|
||||||
#include "modes/larsmmode.h"
|
#include "modes/larsmmode.h"
|
||||||
#include "modes/gametrakmode.h"
|
#include "modes/gametrakmode.h"
|
||||||
|
#include "modes/motortestmode.h"
|
||||||
#include "displays/menus/defaultmodesettingsmenu.h"
|
#include "displays/menus/defaultmodesettingsmenu.h"
|
||||||
#include "displays/menus/tempomatmodesettingsmenu.h"
|
#include "displays/menus/tempomatmodesettingsmenu.h"
|
||||||
#include "displays/menus/larsmmodesettingsmenu.h"
|
#include "displays/menus/larsmmodesettingsmenu.h"
|
||||||
#include "displays/menus/gametrakmodesettingsmenu.h"
|
#include "displays/menus/gametrakmodesettingsmenu.h"
|
||||||
|
#include "displays/menus/motortestmodesettingsmenu.h"
|
||||||
#include "screenmanager.h"
|
#include "screenmanager.h"
|
||||||
|
|
||||||
using namespace espgui;
|
using namespace espgui;
|
||||||
@ -29,6 +31,8 @@ void ModeSettingsAction::triggered()
|
|||||||
switchScreen<TempomatModeSettingsMenu>();
|
switchScreen<TempomatModeSettingsMenu>();
|
||||||
else if (currentMode == &modes::larsmMode)
|
else if (currentMode == &modes::larsmMode)
|
||||||
switchScreen<LarsmModeSettingsMenu>();
|
switchScreen<LarsmModeSettingsMenu>();
|
||||||
|
else if (currentMode == &modes::motortestMode)
|
||||||
|
switchScreen<MotortestModeSettingsMenu>();
|
||||||
#ifdef FEATURE_GAMETRAK
|
#ifdef FEATURE_GAMETRAK
|
||||||
else if (currentMode == &modes::gametrakMode)
|
else if (currentMode == &modes::gametrakMode)
|
||||||
switchScreen<GametrakModeSettingsMenu>();
|
switchScreen<GametrakModeSettingsMenu>();
|
||||||
|
44
main/displays/menus/motortestmodesettingsmenu.cpp
Normal file
44
main/displays/menus/motortestmodesettingsmenu.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#include "motortestmodesettingsmenu.h"
|
||||||
|
|
||||||
|
// 3rdparty lib includes
|
||||||
|
#include "changevaluedisplay.h"
|
||||||
|
#include "menuitem.h"
|
||||||
|
#include "actions/switchscreenaction.h"
|
||||||
|
#include "icons/back.h"
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "utils.h"
|
||||||
|
#include "accessors/settingsaccessors.h"
|
||||||
|
#include "displays/menus/modessettingsmenu.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
using MotortestMultiplikatorChangeDisplay = espgui::makeComponent<
|
||||||
|
espgui::ChangeValueDisplay<uint8_t>,
|
||||||
|
espgui::StaticText<TEXT_MOTORTESTMULTIPLIKATOR>,
|
||||||
|
MotortestModeMultiplikatorAccessor,
|
||||||
|
espgui::BackActionInterface<espgui::SwitchScreenAction<MotortestModeSettingsMenu>>,
|
||||||
|
espgui::SwitchScreenAction<MotortestModeSettingsMenu>
|
||||||
|
>;
|
||||||
|
|
||||||
|
using MotortestMaxPwmChangeDisplay = espgui::makeComponent<
|
||||||
|
espgui::ChangeValueDisplay<uint16_t>,
|
||||||
|
espgui::StaticText<TEXT_MOTORTESTMAXPWM>,
|
||||||
|
MotortestMaxPwmAccessor,
|
||||||
|
espgui::BackActionInterface<espgui::SwitchScreenAction<MotortestModeSettingsMenu>>,
|
||||||
|
espgui::SwitchScreenAction<MotortestModeSettingsMenu>
|
||||||
|
>;
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
using namespace espgui;
|
||||||
|
|
||||||
|
MotortestModeSettingsMenu::MotortestModeSettingsMenu()
|
||||||
|
{
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOTORTESTMULTIPLIKATOR>, SwitchScreenAction<MotortestMultiplikatorChangeDisplay>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOTORTESTMAXPWM>, SwitchScreenAction<MotortestMaxPwmChangeDisplay>>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MotortestModeSettingsMenu::back()
|
||||||
|
{
|
||||||
|
switchScreen<ModesSettingsMenu>();
|
||||||
|
}
|
17
main/displays/menus/motortestmodesettingsmenu.h
Normal file
17
main/displays/menus/motortestmodesettingsmenu.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// 3rdparty lib includes
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "menudisplay.h"
|
||||||
|
#include "texts.h"
|
||||||
|
|
||||||
|
class MotortestModeSettingsMenu :
|
||||||
|
public espgui::MenuDisplay,
|
||||||
|
public espgui::StaticText<TEXT_MOTORTESTMODESETTINGS>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MotortestModeSettingsMenu();
|
||||||
|
|
||||||
|
void back() override;
|
||||||
|
};
|
@ -11,6 +11,7 @@
|
|||||||
#include "modes/larsmmode.h"
|
#include "modes/larsmmode.h"
|
||||||
#include "modes/remotecontrolmode.h"
|
#include "modes/remotecontrolmode.h"
|
||||||
#include "modes/gametrakmode.h"
|
#include "modes/gametrakmode.h"
|
||||||
|
#include "modes/motortestmode.h"
|
||||||
#include "accessors/globalaccessors.h"
|
#include "accessors/globalaccessors.h"
|
||||||
#include "displays/menus/mainmenu.h"
|
#include "displays/menus/mainmenu.h"
|
||||||
|
|
||||||
@ -25,6 +26,7 @@ using SetDefaultModeAction = SetterAction<ModeInterface*, currentMode, DefaultMo
|
|||||||
using SetTempomatModeAction = SetterAction<ModeInterface*, currentMode, TempomatMode*, &modes::tempomatMode>;
|
using SetTempomatModeAction = SetterAction<ModeInterface*, currentMode, TempomatMode*, &modes::tempomatMode>;
|
||||||
using SetLarsmModeAction = SetterAction<ModeInterface*, currentMode, LarsmMode*, &modes::larsmMode>;
|
using SetLarsmModeAction = SetterAction<ModeInterface*, currentMode, LarsmMode*, &modes::larsmMode>;
|
||||||
using SetRemoteControlModeAction = SetterAction<ModeInterface*, currentMode, RemoteControlMode*, &modes::remoteControlMode>;
|
using SetRemoteControlModeAction = SetterAction<ModeInterface*, currentMode, RemoteControlMode*, &modes::remoteControlMode>;
|
||||||
|
using SetMotorTestModeAction = SetterAction<ModeInterface*, currentMode, MotortestMode*, &modes::motortestMode>;
|
||||||
#ifdef FEATURE_GAMETRAK
|
#ifdef FEATURE_GAMETRAK
|
||||||
using SetGametrakModeAction = SetterAction<ModeInterface*, currentMode, GametrakMode*, &modes::gametrakMode>;
|
using SetGametrakModeAction = SetterAction<ModeInterface*, currentMode, GametrakMode*, &modes::gametrakMode>;
|
||||||
#endif
|
#endif
|
||||||
@ -41,6 +43,7 @@ SelectModeMenu::SelectModeMenu()
|
|||||||
#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>>>>();
|
||||||
#endif
|
#endif
|
||||||
|
if (!simplified) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOTORTEST>, MultiAction<SetMotorTestModeAction, SwitchScreenAction<MainMenu>>>>(); }
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,10 +57,12 @@ void SelectModeMenu::start()
|
|||||||
setSelectedIndex(1);
|
setSelectedIndex(1);
|
||||||
else if (currentMode == &modes::larsmMode)
|
else if (currentMode == &modes::larsmMode)
|
||||||
setSelectedIndex(2);
|
setSelectedIndex(2);
|
||||||
|
else if (currentMode == &modes::motortestMode)
|
||||||
|
setSelectedIndex(3);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Serial.printf("Unknown mode: %s", currentMode?currentMode->displayName():"");
|
//Serial.printf("Unknown mode: %s", currentMode?currentMode->displayName():"");
|
||||||
setSelectedIndex(3);
|
setSelectedIndex(4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
40
main/modes/motortestmode.cpp
Normal file
40
main/modes/motortestmode.cpp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#include "motortestmode.h"
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "globals.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
namespace modes {
|
||||||
|
MotortestMode motortestMode;
|
||||||
|
} // namespace modes
|
||||||
|
|
||||||
|
void MotortestMode::start()
|
||||||
|
{
|
||||||
|
m_pwm = 0;
|
||||||
|
m_dir = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MotortestMode::update()
|
||||||
|
{
|
||||||
|
const auto m_pwmMax = settings.motortestMode.maxPwm;
|
||||||
|
m_pwm += m_dir * settings.motortestMode.multiplikator;
|
||||||
|
if (m_pwm > m_pwmMax) {
|
||||||
|
m_pwm = m_pwmMax;
|
||||||
|
m_dir = -m_dir;
|
||||||
|
} else if (m_pwm < -m_pwmMax) {
|
||||||
|
m_pwm = -m_pwmMax;
|
||||||
|
m_dir = -m_dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (bobbycar::protocol::serial::MotorState &motor : motors())
|
||||||
|
{
|
||||||
|
motor.ctrlTyp = bobbycar::protocol::ControlType::Sinusoidal;
|
||||||
|
motor.ctrlMod = bobbycar::protocol::ControlMode::Voltage;
|
||||||
|
motor.pwm = m_pwm;
|
||||||
|
motor.cruiseCtrlEna = false;
|
||||||
|
motor.nCruiseMotTgt = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
fixCommonParams();
|
||||||
|
sendCommands();
|
||||||
|
}
|
20
main/modes/motortestmode.h
Normal file
20
main/modes/motortestmode.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "bobbycar-common.h"
|
||||||
|
#include "modeinterface.h"
|
||||||
|
|
||||||
|
class MotortestMode : public ModeInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void update() override;
|
||||||
|
void start() override;
|
||||||
|
const char *displayName() const override { return "Motortest"; }
|
||||||
|
private:
|
||||||
|
int16_t m_pwm{};
|
||||||
|
int8_t m_dir{};
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace modes {
|
||||||
|
extern MotortestMode motortestMode;
|
||||||
|
} // namespace modes
|
@ -230,6 +230,11 @@ constexpr Settings::LarsmMode defaultLarsmMode {
|
|||||||
.iterations = 100
|
.iterations = 100
|
||||||
};
|
};
|
||||||
|
|
||||||
|
constexpr Settings::MotortestMode defaultMotortestMode {
|
||||||
|
.multiplikator = 2,
|
||||||
|
.maxPwm = 400
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef FEATURE_LEDSTRIP
|
#ifdef FEATURE_LEDSTRIP
|
||||||
constexpr Settings::Ledstrip defaultLedstrip {
|
constexpr Settings::Ledstrip defaultLedstrip {
|
||||||
.enableLedAnimation = true,
|
.enableLedAnimation = true,
|
||||||
@ -307,6 +312,7 @@ constexpr Settings defaultSettings {
|
|||||||
.defaultMode = defaultDefaultMode,
|
.defaultMode = defaultDefaultMode,
|
||||||
.tempomatMode = defaultTempomatMode,
|
.tempomatMode = defaultTempomatMode,
|
||||||
.larsmMode = defaultLarsmMode,
|
.larsmMode = defaultLarsmMode,
|
||||||
|
.motortestMode = defaultMotortestMode,
|
||||||
#ifdef FEATURE_LEDSTRIP
|
#ifdef FEATURE_LEDSTRIP
|
||||||
.ledstrip = defaultLedstrip,
|
.ledstrip = defaultLedstrip,
|
||||||
#endif
|
#endif
|
||||||
|
@ -158,6 +158,11 @@ struct Settings
|
|||||||
uint8_t iterations;
|
uint8_t iterations;
|
||||||
} larsmMode;
|
} larsmMode;
|
||||||
|
|
||||||
|
struct MotortestMode {
|
||||||
|
uint8_t multiplikator;
|
||||||
|
uint16_t maxPwm;
|
||||||
|
} motortestMode;
|
||||||
|
|
||||||
#ifdef FEATURE_LEDSTRIP
|
#ifdef FEATURE_LEDSTRIP
|
||||||
struct Ledstrip {
|
struct Ledstrip {
|
||||||
bool enableLedAnimation;
|
bool enableLedAnimation;
|
||||||
|
@ -277,6 +277,11 @@ constexpr char TEXT_SETMODE[] = "Set mode";
|
|||||||
constexpr char TEXT_SETITERATIONS[] = "Set iterations";
|
constexpr char TEXT_SETITERATIONS[] = "Set iterations";
|
||||||
//constexpr char TEXT_BACK[] = "Back";
|
//constexpr char TEXT_BACK[] = "Back";
|
||||||
|
|
||||||
|
//MotortestModeSettingsMenu
|
||||||
|
constexpr char TEXT_MOTORTESTMODESETTINGS[] = "Motortest mode seetings";
|
||||||
|
constexpr char TEXT_MOTORTESTMAXPWM[] = "Max Pwm";
|
||||||
|
constexpr char TEXT_MOTORTESTMULTIPLIKATOR[] = "Acceleration";
|
||||||
|
|
||||||
//LedstripMenu
|
//LedstripMenu
|
||||||
constexpr char TEXT_LEDSTRIP[] = "Ledstrip";
|
constexpr char TEXT_LEDSTRIP[] = "Ledstrip";
|
||||||
constexpr char TEXT_LEDANIMATION[] = "LED Animation";
|
constexpr char TEXT_LEDANIMATION[] = "LED Animation";
|
||||||
@ -407,6 +412,7 @@ constexpr char TEXT_TEMPOMAT[] = "Tempomat";
|
|||||||
constexpr char TEXT_LARSM[] = "Larsm";
|
constexpr char TEXT_LARSM[] = "Larsm";
|
||||||
constexpr char TEXT_REMOTECONTROL[] = "Remote control";
|
constexpr char TEXT_REMOTECONTROL[] = "Remote control";
|
||||||
constexpr char TEXT_GAMETRAK[] = "Gametrak";
|
constexpr char TEXT_GAMETRAK[] = "Gametrak";
|
||||||
|
constexpr char TEXT_MOTORTEST[] = "Motortest";
|
||||||
//constexpr char TEXT_BACK[] = "Back";
|
//constexpr char TEXT_BACK[] = "Back";
|
||||||
|
|
||||||
//TimersMenu
|
//TimersMenu
|
||||||
|
Reference in New Issue
Block a user