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