Files
bobbycar-boardcomputer-firm…/main/potis.cpp
T

103 lines
2.8 KiB
C++
Raw Normal View History

2021-12-19 01:55:48 +01:00
#include "potis.h"
// 3rdparty lib includes
#include <Arduino.h>
#include <cpputils.h>
// local includes
#include "globals.h"
#ifdef FEATURE_CAN
#include "can.h"
#endif
2021-12-29 18:09:57 +01:00
#include "newsettings.h"
2022-01-22 00:30:37 +01:00
#include "utils.h"
2021-12-19 01:55:48 +01:00
using namespace std::chrono_literals;
void initPotis()
{
2021-12-19 02:37:48 +01:00
raw_gas = std::nullopt;
raw_brems = std::nullopt;
gas = std::nullopt;
brems = std::nullopt;
2021-12-19 04:56:24 +01:00
readPotis();
2021-12-19 01:55:48 +01:00
}
void readPotis()
{
[[maybe_unused]]
2021-12-19 02:37:48 +01:00
constexpr auto sampleMultipleTimes = [](uint8_t pin){
2021-12-29 18:09:57 +01:00
analogRead(pin);
double sum{};
const auto sampleCount = configs.sampleCount.value;
for (int i = 0; i < sampleCount; i++)
sum += analogRead(pin);
return sum / sampleCount;
};
2021-12-19 01:55:48 +01:00
raw_gas = std::nullopt;
raw_brems = std::nullopt;
#ifdef FEATURE_CAN
const auto now = espchrono::millis_clock::now();
if (can::can_gas)
{
if (now - can::last_can_gas < 100ms)
raw_gas = *can::can_gas;
else
can::can_gas = std::nullopt;
}
if (can::can_brems)
{
if (now - can::last_can_brems < 100ms)
raw_brems = *can::can_brems;
else
can::can_brems = std::nullopt;
}
#endif
#ifdef FEATURE_ADC_IN
if (!raw_gas)
raw_gas = sampleMultipleTimes(PINS_GAS);
if (!raw_brems)
raw_brems = sampleMultipleTimes(PINS_BREMS);
#endif
2022-01-22 00:30:37 +01:00
#ifndef FEATURE_JOYSTICK
2021-12-19 01:55:48 +01:00
if (raw_gas)
2021-12-29 18:09:57 +01:00
gas = cpputils::mapValueClamped<float>(*raw_gas, configs.gasMin.value, configs.gasMax.value, 0., 1000.);
2021-12-19 01:55:48 +01:00
else
gas = std::nullopt;
if (raw_brems)
2021-12-29 18:09:57 +01:00
brems = cpputils::mapValueClamped<float>(*raw_brems, configs.bremsMin.value, configs.bremsMax.value, 0., 1000.);
2021-12-19 01:55:48 +01:00
else
brems = std::nullopt;
2022-01-22 00:30:37 +01:00
#else
if (raw_gas)
{
gas = map_analog_stick(configs.gasMitte.value, configs.gasMin.value, configs.gasMax.value, *raw_gas);
}
else
gas = std::nullopt;
if (raw_brems)
{
brems = map_analog_stick(configs.bremsMitte.value, configs.bremsMin.value, configs.bremsMax.value, *raw_brems);
}
else
brems = std::nullopt;
#endif
2021-12-19 01:55:48 +01:00
#ifdef FEATURE_GAMETRAK
raw_gametrakX = sampleMultipleTimes(PINS_GAMETRAKX);
gametrakX = cpputils::mapValueClamped<float>(raw_gametrakX, configs.boardcomputerHardware.gametrakXMin.value, configs.boardcomputerHardware.gametrakXMax.value, 0., 1000.);
2021-12-19 01:55:48 +01:00
raw_gametrakY = sampleMultipleTimes(PINS_GAMETRAKY);
gametrakY = cpputils::mapValueClamped<float>(raw_gametrakY, configs.boardcomputerHardware.gametrakYMin.value, configs.boardcomputerHardware.gametrakYMax.value, 0., 1000.);
2021-12-19 01:55:48 +01:00
raw_gametrakDist = sampleMultipleTimes(PINS_GAMETRAKDIST);
gametrakDist = cpputils::mapValueClamped<float>(raw_gametrakDist, configs.boardcomputerHardware.gametrakDistMin.value, configs.boardcomputerHardware.gametrakDistMax.value, 0., 1000.);
2021-12-19 01:55:48 +01:00
#endif
}