MetersDisplay now shows real values instead of sinus
This commit is contained in:
@ -29,16 +29,14 @@ public:
|
||||
private:
|
||||
VuMeter m_vuMeter;
|
||||
|
||||
int d = 0;
|
||||
|
||||
static constexpr auto x = 40;
|
||||
std::array<VerticalMeter, 6> meters{{
|
||||
VerticalMeter{"A0", 0*x, 160},
|
||||
VerticalMeter{"A1", 1*x, 160},
|
||||
VerticalMeter{"A2", 2*x, 160},
|
||||
VerticalMeter{"A3", 3*x, 160},
|
||||
VerticalMeter{"A4", 4*x, 160},
|
||||
VerticalMeter{"A5", 5*x, 160}
|
||||
VerticalMeter{"U f", 0*x, 160},
|
||||
VerticalMeter{"U b", 1*x, 160},
|
||||
VerticalMeter{"Ivl", 2*x, 160},
|
||||
VerticalMeter{"Ivr", 3*x, 160},
|
||||
VerticalMeter{"Ihl", 4*x, 160},
|
||||
VerticalMeter{"Ihr", 5*x, 160}
|
||||
}};
|
||||
};
|
||||
|
||||
@ -56,11 +54,12 @@ void MetersDisplay::redraw()
|
||||
{
|
||||
m_vuMeter.redraw(avgSpeedKmh);
|
||||
|
||||
int i{};
|
||||
for (auto &meter : meters)
|
||||
meter.redraw(50 + 50 * sin((d + (i++ * 60)) * 0.0174532925));
|
||||
|
||||
d += 4; if (d >= 360) d -= 360;
|
||||
meters[0].redraw(fixBatVoltage(controllers.front.feedback.batVoltage), 35, 50);
|
||||
meters[1].redraw(fixBatVoltage(controllers.back.feedback.batVoltage), 35, 50);
|
||||
meters[2].redraw(fixCurrent(controllers.front.feedback.left.current), -10, 10);
|
||||
meters[3].redraw(fixCurrent(controllers.front.feedback.right.current), -10, 10);
|
||||
meters[4].redraw(fixCurrent(controllers.back.feedback.left.current), -10, 10);
|
||||
meters[5].redraw(fixCurrent(controllers.back.feedback.right.current), -10, 10);
|
||||
}
|
||||
|
||||
void MetersDisplay::rotate(int offset)
|
||||
|
@ -54,7 +54,7 @@ float convertFromInch(float val)
|
||||
|
||||
float fixCurrent(int16_t value)
|
||||
{
|
||||
return std::abs(value/50.);
|
||||
return -value/50.;
|
||||
}
|
||||
|
||||
float fixBatVoltage(int16_t value)
|
||||
|
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "globals.h"
|
||||
#include "utils.h"
|
||||
|
||||
namespace {
|
||||
class VerticalMeter
|
||||
@ -9,14 +10,14 @@ public:
|
||||
VerticalMeter(const char *text, int x, int y);
|
||||
|
||||
void start();
|
||||
void redraw(int value);
|
||||
void redraw(float value, float min, float max);
|
||||
|
||||
private:
|
||||
const char * const m_text;
|
||||
const int m_x;
|
||||
const int m_y;
|
||||
|
||||
int m_oldValue{};
|
||||
float m_oldValue{};
|
||||
};
|
||||
|
||||
VerticalMeter::VerticalMeter(const char *text, int x, int y) :
|
||||
@ -44,7 +45,7 @@ void VerticalMeter::start()
|
||||
tft.drawCentreString("---", m_x + w / 2, m_y + 155 - 18, 2);
|
||||
}
|
||||
|
||||
void VerticalMeter::redraw(int value)
|
||||
void VerticalMeter::redraw(float value, float min, float max)
|
||||
{
|
||||
tft.setTextColor(TFT_GREEN, TFT_BLACK);
|
||||
|
||||
@ -53,23 +54,22 @@ void VerticalMeter::redraw(int value)
|
||||
tft.drawRightString(buf, m_x + 36 - 5, 187 - 27 + 155 - 18, 2);
|
||||
|
||||
const int dx = 3 + m_x;
|
||||
if (value < 0.f) value = 0; // Limit value to emulate needle end stops
|
||||
if (value > 100.f) value = 100;
|
||||
value = scaleBetween<float>(value, min, max, 0.f, 100.f);
|
||||
|
||||
while (value != m_oldValue) {
|
||||
while (m_oldValue > value)
|
||||
{
|
||||
const int dy = 187 + 100 - m_oldValue;
|
||||
if (m_oldValue > value)
|
||||
{
|
||||
tft.drawLine(dx, dy - 5, dx + 16, dy, TFT_WHITE);
|
||||
m_oldValue--;
|
||||
tft.drawLine(dx, dy + 6, dx + 16, dy + 1, TFT_RED);
|
||||
}
|
||||
else
|
||||
{
|
||||
tft.drawLine(dx, dy + 5, dx + 16, dy, TFT_WHITE);
|
||||
m_oldValue++;
|
||||
tft.drawLine(dx, dy - 6, dx + 16, dy - 1, TFT_RED);
|
||||
}
|
||||
tft.drawLine(dx, dy - 5, dx + 16, dy, TFT_WHITE);
|
||||
m_oldValue--;
|
||||
tft.drawLine(dx, dy + 6, dx + 16, dy + 1, TFT_RED);
|
||||
}
|
||||
|
||||
while (m_oldValue < value)
|
||||
{
|
||||
const int dy = 187 + 100 - m_oldValue;
|
||||
tft.drawLine(dx, dy + 5, dx + 16, dy, TFT_WHITE);
|
||||
m_oldValue++;
|
||||
tft.drawLine(dx, dy - 6, dx + 16, dy - 1, TFT_RED);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user