-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMaBoHeMain.cpp
127 lines (108 loc) · 4.14 KB
/
MaBoHeMain.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "MaBoHeMain.hpp"
#include "ui_MaBoHeMain.h"
///////////////////////////////////////////////////////////////////////////////
MaBoHeMain::MaBoHeMain(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MaBoHeMain)
{
ui->setupUi(this);
connect(ui->scanButton, SIGNAL(clicked()), this, SLOT(scanForDevices()));
connect(ui->connectButton, SIGNAL(clicked()), this, SLOT(connectButton()));
connect(&heater, SIGNAL(heater_connected(QSerialPort)), this, SLOT(heater_connected(QSerialPort)));
connect(&heater, SIGNAL(heater_disconnected()), this, SLOT(heater_disconnected()));
connect(&heater, SIGNAL(serial_error(QString,QString)), this, SLOT(serial_error(QString,QString)));
scanForDevices();
heater_disconnected();
ui->graph->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
ui->graph->addGraph();
QVector<double> x(250), y(250);
for (int i = 0; i < 250; ++i) {
x[i] = i;
y[i] = exp(-i/150.0)*cos(i/10.0);
}
ui->graph->graph(0)->setData(x, y);
ui->graph->graph(0)->rescaleAxes();
ui->graph->xAxis->setLabel("time in seconds");
ui->graph->yAxis->setLabel("temperature [C]");
ui->graph->xAxis->setRange(-1,2);
}
///////////////////////////////////////////////////////////////////////////////
MaBoHeMain::~MaBoHeMain()
{
delete ui;
}
///////////////////////////////////////////////////////////////////////////////
void MaBoHeMain::scanForDevices()
{
QList<QSerialPortInfo> devices = QSerialPortInfo::availablePorts();
ui->deviceChooser->clear();
foreach(QSerialPortInfo d, devices) {
ui->deviceChooser->addItem(d.portName(), QVariant::fromValue(d));
}
}
///////////////////////////////////////////////////////////////////////////////
void MaBoHeMain::connectButton()
{
if (!heater.isConnected()) {
qDebug() << "trying to connect";
QSerialPortInfo port = ui->deviceChooser->currentData().value<QSerialPortInfo>();
connectHeater(port);
} else {
qDebug() << "trying to disconnect";
heater.serialDisconnect();
}
}
///////////////////////////////////////////////////////////////////////////////
void MaBoHeMain::connectHeater(const QSerialPortInfo &port)
{
if (port.isValid()) {
heater.serialConnect(port);
} else {
QMessageBox::critical(this, tr("Cannot connect"), tr("Invalid serial port selected."));
}
}
///////////////////////////////////////////////////////////////////////////////
void MaBoHeMain::heater_connected(const QSerialPort& port)
{
ui->statusBar->showMessage(tr("connected to %1").arg(port.portName()));
ui->connectButton->setText(tr("disconnect"));
ui->statusBox->setEnabled(true);
}
///////////////////////////////////////////////////////////////////////////////
void MaBoHeMain::heater_disconnected()
{
ui->statusBar->showMessage(tr("disconnected"));
ui->connectButton->setText(tr("connect"));
ui->statusBox->setEnabled(false);
}
///////////////////////////////////////////////////////////////////////////////
void MaBoHeMain::serial_error(const QString& category, const QString& message)
{
QMessageBox::critical(this, tr("Error during %1").arg(category), message);
}
///////////////////////////////////////////////////////////////////////////////
void MaBoHeMain::update_heater_value(const HeaterResponse& value)
{
switch (value.type) {
case HeaterResponse::Status:
if (value.value > 0.5)
ui->powerValue->setText(tr("ON"));
else
ui->powerValue->setText(tr("OFF"));
break;
case HeaterResponse::TempSens1:
ui->sensor1Value->setText(tr("%1 %2").arg(value.value).arg(value.unit));
break;
case HeaterResponse::TempSens2:
ui->sensor2Value->setText(tr("%1 %2").arg(value.value).arg(value.unit));
break;
case HeaterResponse::TempHeatsink:
ui->heatsinkValue->setText(tr("%1 %2").arg(value.value).arg(value.unit));
break;
// TODO: add rest
default:
qDebug() << "received unknown HeaterResponse type" << value.type;
break;
}
}
///////////////////////////////////////////////////////////////////////////////