Fixed speed 0 mode 'quickstart'
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
#include "defaultmode.h"
|
#include "defaultmode.h"
|
||||||
|
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
namespace modes {
|
namespace modes {
|
||||||
DefaultMode defaultMode;
|
DefaultMode defaultMode;
|
||||||
} // namespace modes
|
} // namespace modes
|
||||||
@@ -45,8 +47,10 @@ void DefaultMode::update()
|
|||||||
local_brems = 0;
|
local_brems = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto gas_processed = settings.defaultMode.squareGas ? (local_gas * local_gas) / 1000.f : local_gas;
|
auto gas_processed = settings.defaultMode.squareGas ? (local_gas * local_gas) / 1000.f : local_gas;
|
||||||
const auto brems_processed = settings.defaultMode.squareBrems ? (local_brems * local_brems) / 1000 : local_brems;
|
auto brems_processed = settings.defaultMode.squareBrems ? (local_brems * local_brems) / 1000 : local_brems;
|
||||||
|
const auto c_gas_processed = gas_processed;
|
||||||
|
const auto c_brems_processed = brems_processed;
|
||||||
|
|
||||||
const auto now = espchrono::millis_clock::now();
|
const auto now = espchrono::millis_clock::now();
|
||||||
|
|
||||||
@@ -54,7 +58,11 @@ void DefaultMode::update()
|
|||||||
goto hell;
|
goto hell;
|
||||||
|
|
||||||
if (settings.handbremse.automatic && settings.handbremse.enable && settings.handbremse.mode == HandbremseMode::SPEED_0 && (abs(gas_processed) > 0 || abs(brems_processed) > 0))
|
if (settings.handbremse.automatic && settings.handbremse.enable && settings.handbremse.mode == HandbremseMode::SPEED_0 && (abs(gas_processed) > 0 || abs(brems_processed) > 0))
|
||||||
|
{
|
||||||
|
if (handbremse::handbremseAngezogen && !m_handbrems_timer)
|
||||||
|
m_handbrems_timer = now;
|
||||||
goto hell;
|
goto hell;
|
||||||
|
}
|
||||||
|
|
||||||
if ((abs(gas_processed) > 10 || abs(brems_processed) > 10) || (!overrideHandbremse && (abs(avgSpeedKmh) > 2 || !controllers.front.feedbackValid || !controllers.back.feedbackValid || settings.handbremse.triggerTimeout < 1 || !settings.handbremse.automatic)))
|
if ((abs(gas_processed) > 10 || abs(brems_processed) > 10) || (!overrideHandbremse && (abs(avgSpeedKmh) > 2 || !controllers.front.feedbackValid || !controllers.back.feedbackValid || settings.handbremse.triggerTimeout < 1 || !settings.handbremse.automatic)))
|
||||||
{
|
{
|
||||||
@@ -67,7 +75,7 @@ void DefaultMode::update()
|
|||||||
m_stillSince = now;
|
m_stillSince = now;
|
||||||
goto hell;
|
goto hell;
|
||||||
}
|
}
|
||||||
else if ((abs(avgSpeedKmh) <= 2) && (overrideHandbremse || espchrono::ago(*m_stillSince) >= espchrono::milliseconds32(settings.handbremse.triggerTimeout)))
|
else if (((settings.handbremse.mode != HandbremseMode::SPEED_0 && abs(avgSpeedKmh) <= 2) || (settings.handbremse.mode == HandbremseMode::SPEED_0 && abs(avgSpeedKmh) <= 1)) && (overrideHandbremse || espchrono::ago(*m_stillSince) >= espchrono::milliseconds32(settings.handbremse.triggerTimeout * 100)))
|
||||||
{
|
{
|
||||||
handbremse::handbremseAngezogen = true;
|
handbremse::handbremseAngezogen = true;
|
||||||
fixCommonParams();
|
fixCommonParams();
|
||||||
@@ -98,6 +106,16 @@ void DefaultMode::update()
|
|||||||
hell:
|
hell:
|
||||||
handbremse::handbremseAngezogen = false;
|
handbremse::handbremseAngezogen = false;
|
||||||
float pwm;
|
float pwm;
|
||||||
|
|
||||||
|
if (m_handbrems_timer && settings.handbremse.automatic && settings.handbremse.enable && settings.handbremse.mode == HandbremseMode::SPEED_0 && (abs(c_gas_processed) > 0 || abs(c_brems_processed) > 0))
|
||||||
|
{
|
||||||
|
if (espchrono::ago(*m_handbrems_timer) < 400ms)
|
||||||
|
{
|
||||||
|
gas_processed = 0;
|
||||||
|
brems_processed = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (gas_processed >= settings.defaultMode.add_schwelle)
|
if (gas_processed >= settings.defaultMode.add_schwelle)
|
||||||
{
|
{
|
||||||
pwm = (gas_processed/1000.*settings.defaultMode.gas1_wert) + (brems_processed/1000.*settings.defaultMode.brems1_wert);
|
pwm = (gas_processed/1000.*settings.defaultMode.gas1_wert) + (brems_processed/1000.*settings.defaultMode.brems1_wert);
|
||||||
@@ -193,6 +211,21 @@ hell:
|
|||||||
motor.nCruiseMotTgt = 0;
|
motor.nCruiseMotTgt = 0;
|
||||||
}
|
}
|
||||||
fixCommonParams();
|
fixCommonParams();
|
||||||
|
|
||||||
|
if (m_handbrems_timer && settings.handbremse.automatic && settings.handbremse.enable && settings.handbremse.mode == HandbremseMode::SPEED_0 && (abs(c_gas_processed) > 0 || abs(c_brems_processed) > 0))
|
||||||
|
{
|
||||||
|
if (espchrono::ago(*m_handbrems_timer) < 200ms)
|
||||||
|
{
|
||||||
|
for (bobbycar::protocol::serial::MotorState &motor : motors())
|
||||||
|
{
|
||||||
|
motor.pwm = 0;
|
||||||
|
motor.ctrlTyp = pair.first;
|
||||||
|
motor.ctrlMod = pair.second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_handbrems_timer = std::nullopt;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,6 +31,7 @@ private:
|
|||||||
espchrono::millis_clock::time_point m_lastTime{espchrono::millis_clock::now()};
|
espchrono::millis_clock::time_point m_lastTime{espchrono::millis_clock::now()};
|
||||||
float m_lastPwm{0};
|
float m_lastPwm{0};
|
||||||
std::optional<espchrono::millis_clock::time_point> m_stillSince;
|
std::optional<espchrono::millis_clock::time_point> m_stillSince;
|
||||||
|
std::optional<espchrono::millis_clock::time_point> m_handbrems_timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace modes {
|
namespace modes {
|
||||||
|
Reference in New Issue
Block a user