Skip to content
Open
6 changes: 4 additions & 2 deletions NERODevelopment/content/EfficiencyScreen.qml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Item {
anchors.fill: parent
property int torqueLimit: efficiencyController.currentMaxTorque
property int numRegen: efficiencyController.currentRegenStrength
property double numRegenPercentage: efficiencyController.currentRegenPercentage
property int hvSOC: efficiencyController.stateOfCharge
property int lvSOC: efficiencyController.lowVoltageStateOfCharge
property int motorTemp: efficiencyController.motorTemp
Expand Down Expand Up @@ -84,14 +85,15 @@ Item {
ThermometerValueComponent {
id: regen
regen: true
thermometerValue: efficiency.numRegen
showPercentage: true
thermometerValue: showPercentage ? efficiency.numRegenPercentage : efficiency.numRegen
title: "REGEN"
Layout.fillWidth: true
Layout.fillHeight: true
radius: efficiency.borderRadii
valueFontSize: efficiency.valueFontSize
labelFontSize: efficiency.labelFontSize
unitFontSize: efficiency.labelFontSize / 2
unitFontSize: efficiency.valueFontSize / 1.5
}
}

Expand Down
6 changes: 4 additions & 2 deletions NERODevelopment/content/SpeedMode.qml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Item {
property int maxDraw: speedController.maxCurrent
property int dcl: speedController.currentDischarge
property double regen: speedController.regen
property double regenPercentage: speedController.regenPercentage

property int xMargin: width / 20
property int yMargin: height / 20
Expand Down Expand Up @@ -89,8 +90,9 @@ Item {
spacing: parent.height / 20

ThermometerValueComponent {
thermometerValue: speedMode.regen
title: "Regen"
showPercentage: true
thermometerValue: showPercentage ? speedMode.regenPercentage : speedMode.regen
title: "REGEN"
Layout.fillHeight: true
Layout.fillWidth: true
Layout.preferredHeight: 1
Expand Down
5 changes: 3 additions & 2 deletions NERODevelopment/content/ThermometerValueComponent.qml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Item {
property int valueFontSize
property int labelFontSize
property int unitFontSize: valueFontSize
property bool showPercentage: false

LabeledComponent {
anchors.fill: parent
Expand All @@ -28,11 +29,11 @@ Item {
labelVerticalSpacing: thermometerComponent.labelVerticalSpacing
labelColor: thermometerComponent.labelColor
horizontalPadding: thermometerComponent.horizontalPadding
valueUnit: regen ? "A" : "°"
valueUnit: regen ? (showPercentage ? "%" : "A") : "°"
radius: thermometerComponent.radius
valueFontSize: thermometerComponent.valueFontSize
labelFontSize: thermometerComponent.labelFontSize
unitFontSize: thermometerComponent.unitFontSize
unitAnchorBottom: regen ? true : false
unitAnchorBottom: false
}
}
95 changes: 60 additions & 35 deletions NERODevelopment/src/controllers/efficiencycontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

EfficiencyController::EfficiencyController(Model *model, QObject *parent)
: ButtonController{model, 4, parent}, m_updateTimer(new QTimer(this)),
m_timerRunning(false) {
connect(m_model, &Model::onCurrentDataChange, this,
&EfficiencyController::currentDataDidChange);
connect(m_updateTimer, &QTimer::timeout, this,
&EfficiencyController::updateCurrentTime);
m_updateTimer->setInterval(1);
m_timerRunning(false) {
connect(m_model, &Model::onCurrentDataChange, this,
&EfficiencyController::currentDataDidChange);
connect(m_updateTimer, &QTimer::timeout, this,
&EfficiencyController::updateCurrentTime);
m_updateTimer->setInterval(1);
currentDataDidChange();
}

int EfficiencyController::currentMaxTorque() const {
Expand All @@ -23,10 +24,30 @@ void EfficiencyController::setCurrentMaxTorque(int torque) {
int EfficiencyController::currentRegenStrength() const {
return m_currentRegenStrength;
}

float EfficiencyController::currentRegenPercentage() const {
if (m_maxRegenCapacity > 0) {
return (m_currentRegenStrength / m_maxRegenCapacity) * 100.0f;
}
return 0.0f;
}

float EfficiencyController::maxRegenCapacity() const {
return m_maxRegenCapacity;
}

void EfficiencyController::setMaxRegenCapacity(float capacity) {
if (capacity != m_maxRegenCapacity) {
m_maxRegenCapacity = capacity;
emit maxRegenCapacityChanged(capacity);
emit currentRegenPercentageChanged(currentRegenPercentage());
}
}
void EfficiencyController::setCurrentRegenStrength(int strength) {
if (strength != m_currentRegenStrength) {
m_currentRegenStrength = strength;
emit currentRegenStrengthChanged(strength);
emit currentRegenPercentageChanged(currentRegenPercentage());
}
}

Expand Down Expand Up @@ -73,35 +94,39 @@ void EfficiencyController::setSpeed(int speed) {
}

void EfficiencyController::currentDataDidChange() {
std::optional<float> torque = m_model->getTorquePower();
std::optional<float> regen = m_model->getRegenPower();
std::optional<float> soc = m_model->getStateOfCharge();
std::optional<float> motorTemp = m_model->getMotorTemp();
std::optional<float> packTemp = m_model->getPackTemp();
std::optional<float> lowVoltageSoc = m_model->getLowVoltageStateOfCharge();
std::optional<float> speed = m_model->getMph();

if (torque) {
setCurrentMaxTorque(*torque);
}
if (regen) {
setCurrentRegenStrength(*regen);
}
if (soc) {
setStateOfCharge(*soc);
}
if (motorTemp) {
setMotorTemp(*motorTemp);
}
if (packTemp) {
setPackTemp(*packTemp);
}
if (lowVoltageSoc) {
setLowVoltageStateOfCharge(*lowVoltageSoc);
}
if (speed) {
setSpeed(*speed);
}
std::optional<float> torque = m_model->getTorquePower();
std::optional<float> regen = m_model->getRegenPower();
std::optional<float> soc = m_model->getStateOfCharge();
std::optional<float> motorTemp = m_model->getMotorTemp();
std::optional<float> packTemp = m_model->getPackTemp();
std::optional<float> lowVoltageSoc = m_model->getLowVoltageStateOfCharge();
std::optional<float> speed = m_model->getMph();
std::optional<float> maxRegenCapacity = m_model->getMaxRegenCapacity();

if (torque) {
setCurrentMaxTorque(*torque);
}
if (regen) {
setCurrentRegenStrength(*regen);
}
if (soc) {
setStateOfCharge(*soc);
}
if (motorTemp) {
setMotorTemp(*motorTemp);
}
if (packTemp) {
setPackTemp(*packTemp);
}
if (lowVoltageSoc) {
setLowVoltageStateOfCharge(*lowVoltageSoc);
}
if (speed) {
setSpeed(*speed);
}
if (maxRegenCapacity) {
setMaxRegenCapacity(*maxRegenCapacity);
}
}

int EfficiencyController::currentTime() const { return m_currentTime; }
Expand Down
10 changes: 9 additions & 1 deletion NERODevelopment/src/controllers/efficiencycontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ class EfficiencyController : public ButtonController {
fastestTimeChanged)
Q_PROPERTY(
int lastTime READ lastTime WRITE setLastTime NOTIFY lastTimeChanged)
Q_PROPERTY(float currentRegenPercentage READ currentRegenPercentage NOTIFY currentRegenPercentageChanged)
Q_PROPERTY(float maxRegenCapacity READ maxRegenCapacity WRITE setMaxRegenCapacity NOTIFY maxRegenCapacityChanged)

public:
explicit EfficiencyController(Model *model, QObject *parent = nullptr);
Expand All @@ -46,6 +48,8 @@ class EfficiencyController : public ButtonController {
int currentTime() const;
int fastestTime() const;
int lastTime() const;
float currentRegenPercentage() const;
float maxRegenCapacity() const;

signals:
void currentMaxTorqueChanged(int);
Expand All @@ -58,6 +62,8 @@ class EfficiencyController : public ButtonController {
void currentTimeChanged(int);
void fastestTimeChanged(int);
void lastTimeChanged(int);
void currentRegenPercentageChanged(float);
void maxRegenCapacityChanged(float);

public slots:
void setCurrentMaxTorque(int);
Expand All @@ -71,13 +77,15 @@ public slots:
void setCurrentTime(int);
void setFastestTime(int);
void setLastTime(int);
void setMaxRegenCapacity(float);

void enterButtonPressed() override;
void updateCurrentTime();

private:
private:
int m_currentMaxTorque = 0; // torque percentage [0,100]
int m_currentRegenStrength = 0; // regen strength [1,3]
float m_maxRegenCapacity = 10.0f; // Changed from 10.0f to 0 - will be set from model
int m_stateOfCharge = 0; // charge percentage [0,100]
int m_motorTemp = 0; // Celsius
int m_packTemp = 0; // Celsius
Expand Down
51 changes: 37 additions & 14 deletions NERODevelopment/src/controllers/speedcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@

SpeedController::SpeedController(Model *model, QObject *parent)
: ButtonController{model, 3, parent}, m_updateTimer(new QTimer(this)) {
connect(m_model, &Model::onCurrentDataChange, this, &SpeedController::update);
connect(m_updateTimer, &QTimer::timeout, this,
&SpeedController::updateCurrentTime);
m_updateTimer->setInterval(1);
connect(m_model, &Model::onCurrentDataChange, this, &SpeedController::update);
connect(m_updateTimer, &QTimer::timeout, this,
&SpeedController::updateCurrentTime);
m_updateTimer->setInterval(1);
update();
}

bool SpeedController::tractionControl() const { return m_tractionControl; }
Expand All @@ -23,9 +24,30 @@ void SpeedController::setRegen(float regen) {
if (regen != m_regen) {
m_regen = regen;
emit regenChanged(regen);
emit regenPercentageChanged(regenPercentage());
}
}

float SpeedController::regenPercentage() const {
if (m_maxRegenCapacity > 0) {
float result = (m_regen / m_maxRegenCapacity) * 100.0f;
return result;
}
return 0.0f;
}

float SpeedController::maxRegenCapacity() const {
return m_maxRegenCapacity;
}

void SpeedController::setMaxRegenCapacity(float capacity) {
if (capacity != m_maxRegenCapacity) {
m_maxRegenCapacity = capacity;
emit maxRegenCapacityChanged(capacity);
emit regenPercentageChanged(regenPercentage());
}
}

float SpeedController::packTemp() const { return m_packTemp; }
void SpeedController::setPackTemp(float packTemp) {
if (packTemp != m_packTemp) {
Expand Down Expand Up @@ -144,14 +166,15 @@ void SpeedController::updateCurrentTime() {
}

void SpeedController::update() {
setTractionControl(*m_model->getTractionControl());
setPackTemp(*m_model->getPackTemp());
setMotorTemp(*m_model->getMotorTemp());
setChargeState(*m_model->getStateOfCharge());
setCurrentSpeed(*m_model->getMph());
setMaxSpeed(m_model->getMaxSpeed());
setCurrent(*m_model->getCurrent());
setMaxCurrent(m_model->getMaxDraw());
setCurrentDischarge(*m_model->getDcl());
setRegen(*m_model->getRegenPower());
setTractionControl(*m_model->getTractionControl());
setPackTemp(*m_model->getPackTemp());
setMotorTemp(*m_model->getMotorTemp());
setChargeState(*m_model->getStateOfCharge());
setCurrentSpeed(*m_model->getMph());
setMaxSpeed(m_model->getMaxSpeed());
setCurrent(*m_model->getCurrent());
setMaxCurrent(m_model->getMaxDraw());
setCurrentDischarge(*m_model->getDcl());
setRegen(*m_model->getRegenPower());
setMaxRegenCapacity(*m_model->getMaxRegenCapacity());
}
9 changes: 8 additions & 1 deletion NERODevelopment/src/controllers/speedcontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ class SpeedController : public ButtonController {
setCurrentDischarge NOTIFY currentDischargeChanged)
Q_PROPERTY(float maxCurrentDischarge READ maxCurrentDischarge WRITE
setMaxCurrentDischarge NOTIFY maxCurrentDischargeChanged)
Q_PROPERTY(float regenPercentage READ regenPercentage NOTIFY regenPercentageChanged)
Q_PROPERTY(float maxRegenCapacity READ maxRegenCapacity WRITE setMaxRegenCapacity NOTIFY maxRegenCapacityChanged)

public:
explicit SpeedController(Model *model, QObject *parent = nullptr);
Expand All @@ -53,6 +55,8 @@ class SpeedController : public ButtonController {
float currentDischarge() const;
float maxCurrentDischarge() const;
float regen() const;
float regenPercentage() const;
float maxRegenCapacity() const;

signals:
void tractionControlChanged(bool);
Expand All @@ -69,6 +73,8 @@ class SpeedController : public ButtonController {
void currentDischargeChanged(float);
void maxCurrentDischargeChanged(float);
void regenChanged(float);
void regenPercentageChanged(float);
void maxRegenCapacityChanged(float);

public slots:
void setTractionControl(bool);
Expand All @@ -85,6 +91,7 @@ public slots:
void setCurrentDischarge(float);
void setMaxCurrentDischarge(float);
void setRegen(float);
void setMaxRegenCapacity(float);

void enterButtonPressed() override;
void updateCurrentTime();
Expand All @@ -106,7 +113,7 @@ public slots:
float m_currentDischarge = 0;
float m_maxCurrentDischarge = 0;
float m_regen = 0;

float m_maxRegenCapacity = 10.0f;
bool m_timerRunning = false;
QElapsedTimer m_timer;
QTimer *m_updateTimer;
Expand Down
12 changes: 6 additions & 6 deletions NERODevelopment/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@ int main(int argc, char *argv[]) {

if (osName == "raspberrypi-sta") {

model = new RaspberryModel();
model->connectToMQTT();
model = new RaspberryModel();
model->connectToMQTT();

} else {
model = new MockModel;
QThread *dataThread = new QThread;
model = new MockModel;
QThread *dataThread = new QThread;

model->moveToThread(dataThread);
dataThread->start();
model->moveToThread(dataThread);
dataThread->start();
}

HomeController homeController(model);
Expand Down
Loading