Skip to content

Commit 1212b60

Browse files
authored
Merge pull request #101 from spikeyamk/devel
Devel
2 parents cb81ab5 + 44e4dd4 commit 1212b60

File tree

103 files changed

+734
-1039
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+734
-1039
lines changed

Diff for: admin/src/chart_widget.cpp

+64-33
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
#include <algorithm>
22

3+
#include <QFile>
34
#include <QDateTime>
5+
#include <QTextStream>
6+
#include <QJsonDocument>
47

58
#include "sens/max31865/rtd.hpp"
69
#include "sens/sht31/temp_hum.hpp"
710
#include "chart_widget.hpp"
11+
#include "to_json.hpp"
812

913
ChartWidget::ChartWidget() :
1014
layout { new QVBoxLayout(this) },
@@ -19,10 +23,10 @@ ChartWidget::ChartWidget() :
1923
dac_chart { new QChart() },
2024
dac_chart_view { new QChartView(dac_chart) },
2125

22-
sht31_inside_series { new QLineSeries(this) },
23-
sht31_outside_series { new QLineSeries(this) },
24-
sht31_chart { new QChart() },
25-
sht31_chart_view { new QChartView(sht31_chart) },
26+
dmax31865_front_series { new QLineSeries(this) },
27+
dmax31865_rear_series { new QLineSeries(this) },
28+
dmax31865_chart { new QChart() },
29+
dmax31865_chart_view { new QChartView(dmax31865_chart) },
2630

2731
msecs_since_epoch { static_cast<qreal>(QDateTime::currentMSecsSinceEpoch()) }
2832
{
@@ -51,6 +55,26 @@ ChartWidget::ChartWidget() :
5155
layout->addWidget(max31865_chart_view);
5256
}
5357

58+
{
59+
dmax31865_front_series->setName("dmax31865_front");
60+
dmax31865_front_series->setPen(front_pen);
61+
62+
dmax31865_rear_series->setName("dmax31865_rear");
63+
dmax31865_rear_series->setPen(rear_pen);
64+
65+
dmax31865_chart->addSeries(dmax31865_front_series);
66+
dmax31865_chart->addSeries(dmax31865_rear_series);
67+
68+
dmax31865_chart->createDefaultAxes();
69+
dmax31865_chart->setTitle(typeid(magic::results::ReadTempCtl()).name());
70+
dmax31865_chart->axes(Qt::Vertical).front()->setTitleText("dTemperature [°C/s]");
71+
dmax31865_chart->axes(Qt::Horizontal).front()->setTitleText("Time [s]");
72+
73+
dmax31865_chart_view->setRenderHint(QPainter::Antialiasing);
74+
75+
layout->addWidget(dmax31865_chart_view);
76+
}
77+
5478
{
5579
dac_front_series->setName("dac_front");
5680
dac_front_series->setPen(front_pen);
@@ -70,53 +94,46 @@ ChartWidget::ChartWidget() :
7094

7195
layout->addWidget(dac_chart_view);
7296
}
73-
74-
{
75-
sht31_inside_series->setName("sht31_inside");
76-
sht31_inside_series->setPen(front_pen);
77-
78-
sht31_outside_series->setName("sht31_outside");
79-
sht31_outside_series->setPen(rear_pen);
80-
81-
sht31_chart->addSeries(sht31_inside_series);
82-
sht31_chart->addSeries(sht31_outside_series);
83-
84-
sht31_chart->createDefaultAxes();
85-
sht31_chart->setTitle(typeid(magic::results::ReadTempCtl()).name());
86-
sht31_chart->axes(Qt::Vertical).front()->setTitleText("Temperature [°C]");
87-
sht31_chart->axes(Qt::Horizontal).front()->setTitleText("Time [s]");
88-
89-
sht31_chart_view->setRenderHint(QPainter::Antialiasing);
90-
91-
layout->addWidget(sht31_chart_view);
92-
}
9397
}
9498

9599
ChartWidget::~ChartWidget() {
96100
delete max31865_chart;
97101
delete dac_chart;
98-
delete sht31_chart;
102+
delete dmax31865_chart;
99103
}
100104

101-
void ChartWidget::push(const magic::results::ReadTempCtl& read_sensors) {
105+
void ChartWidget::push_to_charts(const magic::results::ReadTempCtl& read_sensors) {
102106
const qreal current_x_value { (static_cast<qreal>(QDateTime::currentMSecsSinceEpoch()) - msecs_since_epoch) / 1000.0f };
107+
108+
const qreal max31865_front_value { sens::max31865::RTD(sens::max31865::ADC_Code(read_sensors.max31865_front).serialize()).calculate_approx_temp().value() };
109+
const qreal max31865_rear_value { sens::max31865::RTD(sens::max31865::ADC_Code(read_sensors.max31865_rear).serialize()).calculate_approx_temp().value() };
103110
{
104-
max31865_front_series->append(current_x_value, sens::max31865::RTD(sens::max31865::ADC_Code(read_sensors.max31865_front).serialize()).calculate_approx_temp().value());
105-
max31865_rear_series->append(current_x_value, sens::max31865::RTD(sens::max31865::ADC_Code(read_sensors.max31865_rear).serialize()).calculate_approx_temp().value());
111+
max31865_front_series->append(current_x_value, max31865_front_value);
112+
max31865_rear_series->append(current_x_value, max31865_rear_value);
106113
autoscale_axes(max31865_chart, max31865_front_series, max31865_rear_series);
107114
}
108115

116+
{
117+
static qreal max31865_front_before { max31865_front_value };
118+
static qreal max31865_rear_before { max31865_rear_value };
119+
120+
dmax31865_front_series->append(current_x_value, max31865_front_before - max31865_front_value);
121+
dmax31865_rear_series->append(current_x_value, max31865_rear_before - max31865_rear_value);
122+
autoscale_axes(dmax31865_chart, dmax31865_front_series, dmax31865_rear_series);
123+
124+
max31865_front_before = max31865_front_value;
125+
max31865_rear_before = max31865_rear_value;
126+
}
127+
109128
{
110129
dac_front_series->append(current_x_value, static_cast<qreal>(read_sensors.dac_front));
111130
dac_rear_series->append(current_x_value, static_cast<qreal>(read_sensors.dac_rear));
112131
autoscale_axes(dac_chart, dac_front_series, dac_rear_series);
113132
}
114133

115-
{
116-
sht31_inside_series->append(current_x_value, static_cast<qreal>(sens::sht31::TempHum(read_sensors.sht31_inside, 0).calculate_temp()));
117-
sht31_outside_series->append(current_x_value, static_cast<qreal>(sens::sht31::TempHum(read_sensors.sht31_outside, 0).calculate_temp()));
118-
autoscale_axes(sht31_chart, sht31_inside_series, sht31_outside_series);
119-
}
134+
QJsonObject json_object { to_json(read_sensors) };
135+
json_object["time"] = current_x_value;
136+
json_array.append(json_object);
120137
}
121138

122139
void ChartWidget::autoscale_axes(QChart* chart, QLineSeries* front_series, QLineSeries* rear_series) {
@@ -165,4 +182,18 @@ void ChartWidget::autoscale_axes(QChart* chart, QLineSeries* front_series, QLine
165182
chart->axes(Qt::Horizontal).first()->setMin(min_x);
166183
chart->axes(Qt::Vertical).first()->setMax(max_y);
167184
chart->axes(Qt::Vertical).first()->setMin(min_y);
185+
}
186+
187+
void ChartWidget::dump_to_file(const QString& file_path) {
188+
qDebug()
189+
<< "void ChartWidget::dump_to_file(const QString& file_path)";
190+
191+
QFile file(file_path);
192+
if(file.open(QIODevice::WriteOnly)) {
193+
QJsonDocument json_document(json_array);
194+
file.write(json_document.toJson(QJsonDocument::Indented)); // Indented for readability
195+
qDebug() << "Data successfully written to" << file_path;
196+
} else {
197+
qDebug() << "Error: Unable to open the file for writing.";
198+
}
168199
}

Diff for: admin/src/chart_widget.hpp

+10-5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#include <QChartView>
77
#include <QVBoxLayout>
88
#include <QTimer>
9+
#include <QJsonObject>
10+
#include <QJsonArray>
911

1012
#include "magic/results/results.hpp"
1113

@@ -19,22 +21,25 @@ class ChartWidget : public QWidget {
1921
QChart* max31865_chart { nullptr };
2022
QChartView* max31865_chart_view { nullptr };
2123

24+
QLineSeries* dmax31865_front_series { nullptr };
25+
QLineSeries* dmax31865_rear_series { nullptr };
26+
QChart* dmax31865_chart { nullptr };
27+
QChartView* dmax31865_chart_view { nullptr };
28+
2229
QLineSeries* dac_front_series { nullptr };
2330
QLineSeries* dac_rear_series { nullptr };
2431
QChart* dac_chart { nullptr };
2532
QChartView* dac_chart_view { nullptr };
2633

27-
QLineSeries* sht31_inside_series { nullptr };
28-
QLineSeries* sht31_outside_series { nullptr };
29-
QChart* sht31_chart { nullptr };
30-
QChartView* sht31_chart_view { nullptr };
34+
QJsonArray json_array {};
3135

3236
const qreal msecs_since_epoch;
3337
public:
3438
ChartWidget();
3539
~ChartWidget();
3640
public:
37-
void push(const magic::results::ReadTempCtl& read_sensors);
41+
void push_to_charts(const magic::results::ReadTempCtl& read_sensors);
42+
void dump_to_file(const QString& file_path);
3843
private:
3944
void autoscale_axes(QChart* chart, QLineSeries* front_series, QLineSeries* rear_series);
4045
};

Diff for: admin/src/dialog.cpp

+13-14
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Dialog::Dialog(ChartWidget& chart_widget, QWidget* parent) :
1414
device_label { new QLabel("Device: ") },
1515
device_combo_box { new QComboBox() },
1616
transmit_button { new QPushButton("Transmit") },
17+
save_button { new QPushButton("Save") },
1718

1819
command_label { new QLabel("Command: ") },
1920
command_combo_box { new QComboBox() },
@@ -35,6 +36,8 @@ Dialog::Dialog(ChartWidget& chart_widget, QWidget* parent) :
3536
layout->addWidget(device_combo_box, 0, 1);
3637
transmit_button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
3738
layout->addWidget(transmit_button, 0, 2, 3, 1);
39+
layout->addWidget(save_button, 0, 3, 3, 1);
40+
save_button->setEnabled(false);
3841

3942
for(const auto& e: command_map.keys()) {
4043
command_combo_box->addItem(e);
@@ -69,6 +72,7 @@ Dialog::Dialog(ChartWidget& chart_widget, QWidget* parent) :
6972
});
7073

7174
connect(transmit_button, &QPushButton::clicked, this, &Dialog::start_transmit);
75+
connect(save_button, &QPushButton::clicked, this, &Dialog::open_file_picker);
7276
connect(&transceiver, &Transceiver::result, this, &Dialog::show_result);
7377
//connect(&transceiver, &Transceiver::result_buf, this, &Dialog::show_result_buf);
7478
connect(&transceiver, &Transceiver::error_occured, this, &Dialog::error_occured);
@@ -83,6 +87,13 @@ void Dialog::start_transmit() {
8387
}
8488
}
8589

90+
void Dialog::open_file_picker() {
91+
qDebug()
92+
<< "Dialog::open_file_picker()";
93+
const QString file_path { QFileDialog::getSaveFileName(this, "Save File", "", "JSON Files (*.json)") };
94+
chart_widget.dump_to_file(file_path);
95+
}
96+
8697
void Dialog::transmit() {
8798
const QSerialPortInfo device { device_combo_box->currentText() };
8899
if(device.isNull()) {
@@ -100,20 +111,8 @@ void Dialog::show_result(const Transceiver::ResultVariant& result) {
100111
[&](auto&& result) {
101112
using Decay = std::decay_t<decltype(result)>;
102113
if constexpr(std::is_same_v<Decay, magic::results::ReadTempCtl>) {
103-
static bool was_active_before { false };
104-
if(periodic_timer->isActive() && (was_active_before == false)) {
105-
std::cout << "[\n";
106-
was_active_before = true;
107-
}
108-
109-
std::cout << QString(QJsonDocument(to_json(result)).toJson(QJsonDocument::Compact)).toStdString() << ",\n";
110-
111-
chart_widget.push(result);
112-
113-
if(periodic_timer->isActive() == false) {
114-
std::cout << "]\n";
115-
was_active_before = false;
116-
}
114+
save_button->setEnabled(true);
115+
chart_widget.push_to_charts(result);
117116
} else if constexpr(std::is_same_v<Decay, magic::results::WriteTemp>) {
118117
qDebug()
119118
<< "Dialog::show_result():"

Diff for: admin/src/dialog.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <QCheckBox>
99
#include <QTimer>
1010
#include <QSlider>
11+
#include <QFileDialog>
1112

1213
#include "transceiver.hpp"
1314
#include "chart_widget.hpp"
@@ -21,6 +22,7 @@ class Dialog : public QDialog {
2122
QComboBox* device_combo_box { nullptr };
2223

2324
QPushButton* transmit_button { nullptr };
25+
QPushButton* save_button { nullptr };
2426

2527
QLabel* command_label { nullptr };
2628
const QMap<QString, Transceiver::CommandResult> command_map {{
@@ -50,6 +52,7 @@ private slots:
5052
void show_result(const Transceiver::ResultVariant& result);
5153
void show_result_buf(const QByteArray& result);
5254
void error_occured(const Transceiver::Error error);
55+
void open_file_picker();
5356
public:
5457
Dialog(ChartWidget& chart_widget, QWidget* parent = nullptr);
5558
};

Diff for: admin/src/main.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44
#include "chart_widget.hpp"
55

66
int main(int argc, char *argv[]) {
7-
QApplication app(argc, argv);
8-
7+
QApplication app { argc, argv };
98
ChartWidget chart_widget {};
109
chart_widget.resize(400, 400);
1110
chart_widget.show();
1211

1312
Dialog dialog { chart_widget };
1413
dialog.show();
15-
16-
return app.exec();
14+
app.exec();
1715
}

Diff for: admin/src/to_json.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1+
#include "sens/max31865/rtd.hpp"
2+
#include "sens/sht31/temp_hum.hpp"
13
#include "magic/results/results.hpp"
24
#include "to_json.hpp"
35

46
template<>
57
QJsonObject to_json<magic::results::ReadTempCtl>(const magic::results::ReadTempCtl& obj) {
68
QJsonObject ret;
7-
ret["max31865_front"] = obj.max31865_front;
8-
ret["max31865_rear"] = obj.max31865_rear;
9+
ret["max31865_front"] = sens::max31865::RTD(sens::max31865::ADC_Code(obj.max31865_front).serialize()).calculate_approx_temp().value();
10+
ret["max31865_rear"] = sens::max31865::RTD(sens::max31865::ADC_Code(obj.max31865_rear).serialize()).calculate_approx_temp().value();
11+
ret["dac_front"] = obj.dac_front;
12+
ret["dac_rear"] = obj.dac_rear;
13+
ret["sht31_inside"] = sens::sht31::TempHum(obj.sht31_inside, 0).calculate_temp();
14+
ret["sht31_outside"] = sens::sht31::TempHum(obj.sht31_outside, 0).calculate_temp();
915
return ret;
1016
}

0 commit comments

Comments
 (0)