Implemented better control with gametrak

This commit is contained in:
2020-06-01 03:41:18 +02:00
parent 8f96a32b57
commit bb289f6e73

View File

@ -1,5 +1,14 @@
#pragma once
namespace {
template<class T>
constexpr const T& clamp( const T& v, const T& lo, const T& hi )
{
assert( !(hi < lo) );
return (v < lo) ? lo : (hi < v) ? hi : v;
}
}
#include "modeinterface.h"
#include "globals.h"
#include "utils.h"
@ -12,15 +21,24 @@ namespace {
class GametrakMode : public ModeInterface
{
public:
void start() override;
void update() override;
const char *displayName() const override { return "Gametrak"; }
private:
bool m_flag;
};
namespace modes {
GametrakMode gametrakMode;
}
void GametrakMode::start()
{
m_flag = false;
}
void GametrakMode::update()
{
if (gas > 500. || brems > 500.)
@ -31,11 +49,28 @@ void GametrakMode::update()
return;
}
int16_t pwm;
if (gametrakDist < 150)
{
pwm = 0;
m_flag = false;
}
else
{
if (m_flag || gametrakDist >= 400)
{
m_flag = true;
pwm = clamp<int>((gametrakDist - 400) / 2, -200, 200);
}
else
pwm = 0;
}
for (MotorState &motor : motors())
{
motor.ctrlTyp = ControlType::FieldOrientedControl;
motor.ctrlMod = ControlMode::Speed;
motor.pwm = gametrakDist > 200 ? 20 : 0;
motor.pwm = pwm;
}
fixCommonParams();