Commit 6eb13ba2e37b439fc99e3d8b5e28b40c181bbb56
1 parent
50e20e69fd
Exists in
master
and in
2 other branches
예열 팝업 동작 보완 및 동작 정의 변경
- 현재 온도에 따라 예열 게이지 상태 변환 - 현재 온도가 목표 예열 온도에 도달하면 예열 중단 후 복귀
Showing
7 changed files
with
106 additions
and
44 deletions
Show diff stats
app/gui/oven_control/mainwindow.cpp
@@ -20,7 +20,7 @@ MainWindow::MainWindow(QWidget *parent) : | @@ -20,7 +20,7 @@ MainWindow::MainWindow(QWidget *parent) : | ||
20 | 20 | ||
21 | oven = new Oven(this); | 21 | oven = new Oven(this); |
22 | 22 | ||
23 | - OvenController *interface = new OvenController; | 23 | + OvenController *interface = new OvenController(this, oven); |
24 | oven->setInterface(interface); | 24 | oven->setInterface(interface); |
25 | 25 | ||
26 | udp = new UdpHandler(this); | 26 | udp = new UdpHandler(this); |
app/gui/oven_control/oven.cpp
@@ -7,6 +7,10 @@ Oven::Oven(QObject *parent) : QObject(parent) | @@ -7,6 +7,10 @@ Oven::Oven(QObject *parent) : QObject(parent) | ||
7 | { | 7 | { |
8 | interface = NULL; | 8 | interface = NULL; |
9 | 9 | ||
10 | + currentHumidity_ = 0; | ||
11 | + currentTemp_ = 0; | ||
12 | + currentInterTemp_ = 0; | ||
13 | + | ||
10 | cookingTimer.setSingleShot(true); | 14 | cookingTimer.setSingleShot(true); |
11 | connect(&cookingTimer, SIGNAL(timeout()), this, SLOT(stopCooking())); | 15 | connect(&cookingTimer, SIGNAL(timeout()), this, SLOT(stopCooking())); |
12 | 16 | ||
@@ -83,7 +87,6 @@ void Oven::setDefault(Mode mode) | @@ -83,7 +87,6 @@ void Oven::setDefault(Mode mode) | ||
83 | cooldown_ = false; | 87 | cooldown_ = false; |
84 | damper_ = false; | 88 | damper_ = false; |
85 | humidification_ = false; | 89 | humidification_ = false; |
86 | - washing_ = false; | ||
87 | door_ = interface->door(); | 90 | door_ = interface->door(); |
88 | paused_ = false; | 91 | paused_ = false; |
89 | 92 | ||
@@ -285,26 +288,30 @@ void Oven::stop() | @@ -285,26 +288,30 @@ void Oven::stop() | ||
285 | 288 | ||
286 | if (humidification()) | 289 | if (humidification()) |
287 | stopHumidification(); | 290 | stopHumidification(); |
288 | - | ||
289 | - if (washing()) | ||
290 | - stopWashing(); | ||
291 | } | 291 | } |
292 | 292 | ||
293 | void Oven::startCooking() | 293 | void Oven::startCooking() |
294 | { | 294 | { |
295 | - paused_ = false; | ||
296 | - | ||
297 | if (!cooking()) | 295 | if (!cooking()) |
298 | { | 296 | { |
299 | - if (preheating()) | ||
300 | - stopPreheating(); | 297 | + if (door()) |
298 | + { | ||
299 | + paused_ = true; | ||
300 | + } | ||
301 | + else | ||
302 | + { | ||
303 | + paused_ = false; | ||
304 | + | ||
305 | + if (preheating()) | ||
306 | + stopPreheating(); | ||
301 | 307 | ||
302 | - if (cooldown()) | ||
303 | - stopCooldown(); | 308 | + if (cooldown()) |
309 | + stopCooldown(); | ||
304 | 310 | ||
305 | - cooking_ = true; | ||
306 | - cookingTimer.start(); | ||
307 | - interface->startCooking(); | 311 | + cooking_ = true; |
312 | + cookingTimer.start(); | ||
313 | + interface->startCooking(); | ||
314 | + } | ||
308 | 315 | ||
309 | emit changed(this); | 316 | emit changed(this); |
310 | } | 317 | } |
@@ -334,6 +341,9 @@ void Oven::startPreheating() | @@ -334,6 +341,9 @@ void Oven::startPreheating() | ||
334 | { | 341 | { |
335 | if (preheatingStartable()) | 342 | if (preheatingStartable()) |
336 | { | 343 | { |
344 | + if (cooking()) | ||
345 | + stopCooking(); | ||
346 | + | ||
337 | preheating_ = true; | 347 | preheating_ = true; |
338 | interface->startPreheating(); | 348 | interface->startPreheating(); |
339 | 349 | ||
@@ -349,6 +359,9 @@ void Oven::stopPreheating() | @@ -349,6 +359,9 @@ void Oven::stopPreheating() | ||
349 | interface->stopPreheating(); | 359 | interface->stopPreheating(); |
350 | 360 | ||
351 | emit changed(this); | 361 | emit changed(this); |
362 | + | ||
363 | + if (paused()) | ||
364 | + startCooking(); | ||
352 | } | 365 | } |
353 | } | 366 | } |
354 | 367 | ||
@@ -406,26 +419,17 @@ void Oven::stopHumidification() | @@ -406,26 +419,17 @@ void Oven::stopHumidification() | ||
406 | } | 419 | } |
407 | } | 420 | } |
408 | 421 | ||
409 | -void Oven::startWashing() | ||
410 | -{ | ||
411 | - | ||
412 | -} | ||
413 | - | ||
414 | -void Oven::stopWashing() | ||
415 | -{ | ||
416 | - | ||
417 | -} | ||
418 | - | ||
419 | -void Oven::openDamper() | 422 | +void Oven::openDamper(int secs) |
420 | { | 423 | { |
421 | if (!damper()) | 424 | if (!damper()) |
422 | { | 425 | { |
423 | damper_ = true; | 426 | damper_ = true; |
424 | - damperTimer.start(5 * 60 * 1000); | ||
425 | interface->openDamper(); | 427 | interface->openDamper(); |
426 | 428 | ||
427 | emit changed(this); | 429 | emit changed(this); |
428 | } | 430 | } |
431 | + | ||
432 | + damperTimer.start(secs * 1000); | ||
429 | } | 433 | } |
430 | 434 | ||
431 | void Oven::closeDamper() | 435 | void Oven::closeDamper() |
@@ -442,6 +446,33 @@ void Oven::closeDamper() | @@ -442,6 +446,33 @@ void Oven::closeDamper() | ||
442 | } | 446 | } |
443 | } | 447 | } |
444 | 448 | ||
449 | +void Oven::setCurrentHumidity(int percentage) | ||
450 | +{ | ||
451 | + if (currentHumidity() != percentage) | ||
452 | + { | ||
453 | + currentHumidity_ = percentage; | ||
454 | + emit changed(this); | ||
455 | + } | ||
456 | +} | ||
457 | + | ||
458 | +void Oven::setCurrentTemp(int celsius) | ||
459 | +{ | ||
460 | + if (currentTemp() != celsius) | ||
461 | + { | ||
462 | + currentTemp_ = celsius; | ||
463 | + emit changed(this); | ||
464 | + } | ||
465 | +} | ||
466 | + | ||
467 | +void Oven::setCurrentInterTemp(int celsius) | ||
468 | +{ | ||
469 | + if (currentInterTemp() != celsius) | ||
470 | + { | ||
471 | + currentInterTemp_ = celsius; | ||
472 | + emit changed(this); | ||
473 | + } | ||
474 | +} | ||
475 | + | ||
445 | 476 | ||
446 | 477 | ||
447 | 478 | ||
@@ -523,7 +554,10 @@ void Oven::onDoorOpened() | @@ -523,7 +554,10 @@ void Oven::onDoorOpened() | ||
523 | emit changed(this); | 554 | emit changed(this); |
524 | 555 | ||
525 | if (cooking()) | 556 | if (cooking()) |
557 | + { | ||
526 | stopCooking(); | 558 | stopCooking(); |
559 | + openDamper(7); | ||
560 | + } | ||
527 | } | 561 | } |
528 | 562 | ||
529 | void Oven::onDoorClosed() | 563 | void Oven::onDoorClosed() |
@@ -532,6 +566,9 @@ void Oven::onDoorClosed() | @@ -532,6 +566,9 @@ void Oven::onDoorClosed() | ||
532 | 566 | ||
533 | emit changed(this); | 567 | emit changed(this); |
534 | 568 | ||
535 | - if (paused()) | 569 | + if (!cooldown() && paused()) |
536 | startCooking(); | 570 | startCooking(); |
571 | + | ||
572 | + if (damper()) | ||
573 | + closeDamper(); | ||
537 | } | 574 | } |
app/gui/oven_control/oven.h
@@ -66,7 +66,10 @@ private: | @@ -66,7 +66,10 @@ private: | ||
66 | bool damper_ = false; // true: open, false: close | 66 | bool damper_ = false; // true: open, false: close |
67 | bool humidification_ = false; | 67 | bool humidification_ = false; |
68 | bool door_ = false; // true: open, false: close | 68 | bool door_ = false; // true: open, false: close |
69 | - bool washing_ = false; | 69 | + |
70 | + int currentHumidity_; | ||
71 | + int currentTemp_; | ||
72 | + int currentInterTemp_; | ||
70 | 73 | ||
71 | 74 | ||
72 | bool paused_; | 75 | bool paused_; |
@@ -95,12 +98,11 @@ public: | @@ -95,12 +98,11 @@ public: | ||
95 | bool damper() { return damper_; } | 98 | bool damper() { return damper_; } |
96 | bool humidification() { return humidification_; } | 99 | bool humidification() { return humidification_; } |
97 | bool door() { return door_; } | 100 | bool door() { return door_; } |
98 | - bool washing() { return washing_; } | ||
99 | bool paused() { return paused_; } | 101 | bool paused() { return paused_; } |
100 | 102 | ||
101 | - int currentTemp() { return interface->currentTemp(); } | ||
102 | - int currentHumidity() { return interface->currentHumidity(); } | ||
103 | - int currentInterTemp() { return interface->currentInterTemp(); } | 103 | + int currentTemp() { return currentTemp_; } |
104 | + int currentHumidity() { return currentHumidity_; } | ||
105 | + int currentInterTemp() { return currentInterTemp_; } | ||
104 | 106 | ||
105 | bool cookingStartable(); | 107 | bool cookingStartable(); |
106 | bool preheatingStartable(); | 108 | bool preheatingStartable(); |
@@ -139,12 +141,13 @@ public slots: | @@ -139,12 +141,13 @@ public slots: | ||
139 | void stopCooldown(); | 141 | void stopCooldown(); |
140 | void startHumidification(); | 142 | void startHumidification(); |
141 | void stopHumidification(); | 143 | void stopHumidification(); |
142 | - void startWashing(); | ||
143 | - void stopWashing(); | ||
144 | 144 | ||
145 | - void openDamper(); | 145 | + void openDamper(int secs = 300); |
146 | void closeDamper(); | 146 | void closeDamper(); |
147 | 147 | ||
148 | + void setCurrentHumidity(int percentage); | ||
149 | + void setCurrentTemp(int celsius); | ||
150 | + void setCurrentInterTemp(int celsius); | ||
148 | 151 | ||
149 | void setInterface(OvenInterface *interface); | 152 | void setInterface(OvenInterface *interface); |
150 | 153 |
app/gui/oven_control/ovencontroller.cpp
1 | #include "ovencontroller.h" | 1 | #include "ovencontroller.h" |
2 | 2 | ||
3 | -OvenController::OvenController(QObject *parent) : OvenInterface(parent) | 3 | +OvenController::OvenController(QObject *parent, Oven *oven) : OvenInterface(parent), |
4 | + oven(oven) | ||
4 | { | 5 | { |
5 | bzero(&control, sizeof(control)); | 6 | bzero(&control, sizeof(control)); |
6 | bzero(&state, sizeof(state)); | 7 | bzero(&state, sizeof(state)); |
@@ -29,6 +30,10 @@ void OvenController::onDataChanged() | @@ -29,6 +30,10 @@ void OvenController::onDataChanged() | ||
29 | if (state.door_state != 0) | 30 | if (state.door_state != 0) |
30 | emit doorOpened(); | 31 | emit doorOpened(); |
31 | } | 32 | } |
33 | + | ||
34 | + oven->setCurrentHumidity(currentHumidity()); | ||
35 | + oven->setCurrentTemp(currentTemp()); | ||
36 | + oven->setCurrentInterTemp(currentInterTemp()); | ||
32 | } | 37 | } |
33 | 38 | ||
34 | int OvenController::currentTemp() | 39 | int OvenController::currentTemp() |
@@ -92,7 +97,7 @@ void OvenController::stopCooking() | @@ -92,7 +97,7 @@ void OvenController::stopCooking() | ||
92 | 97 | ||
93 | void OvenController::startPreheating() | 98 | void OvenController::startPreheating() |
94 | { | 99 | { |
95 | - udp->set(TG_OVEN_MODE, 0); | 100 | + udp->set(TG_OVEN_MODE, 1); |
96 | udp->set(TG_TIME, 1440); | 101 | udp->set(TG_TIME, 1440); |
97 | udp->turnOn(TG_SYSTEM); | 102 | udp->turnOn(TG_SYSTEM); |
98 | udp->turnOn(TG_PREHEAT); | 103 | udp->turnOn(TG_PREHEAT); |
@@ -135,10 +140,10 @@ void OvenController::stopWashing() | @@ -135,10 +140,10 @@ void OvenController::stopWashing() | ||
135 | 140 | ||
136 | void OvenController::openDamper() | 141 | void OvenController::openDamper() |
137 | { | 142 | { |
138 | - | 143 | + udp->turnOn(TG_OUTHUMIDITY); |
139 | } | 144 | } |
140 | 145 | ||
141 | void OvenController::closeDamper() | 146 | void OvenController::closeDamper() |
142 | { | 147 | { |
143 | - | 148 | + udp->turnOff(TG_OUTHUMIDITY); |
144 | } | 149 | } |
app/gui/oven_control/ovencontroller.h
@@ -9,12 +9,13 @@ class OvenController : public OvenInterface | @@ -9,12 +9,13 @@ class OvenController : public OvenInterface | ||
9 | { | 9 | { |
10 | Q_OBJECT | 10 | Q_OBJECT |
11 | 11 | ||
12 | + Oven *oven; | ||
12 | UdpHandler *udp; | 13 | UdpHandler *udp; |
13 | oven_control_t control; | 14 | oven_control_t control; |
14 | oven_state_t state; | 15 | oven_state_t state; |
15 | 16 | ||
16 | public: | 17 | public: |
17 | - OvenController(QObject *parent = 0); | 18 | + OvenController(QObject *parent = 0, Oven *oven = 0); |
18 | 19 | ||
19 | void setUdpHandler(UdpHandler *udp); | 20 | void setUdpHandler(UdpHandler *udp); |
20 | int currentTemp(); | 21 | int currentTemp(); |
app/gui/oven_control/preheatpopup.cpp
@@ -12,7 +12,7 @@ PreheatPopup::PreheatPopup(QWidget *parent, Oven *oven) : | @@ -12,7 +12,7 @@ PreheatPopup::PreheatPopup(QWidget *parent, Oven *oven) : | ||
12 | 12 | ||
13 | setAttribute(Qt::WA_DeleteOnClose); | 13 | setAttribute(Qt::WA_DeleteOnClose); |
14 | 14 | ||
15 | - connect(oven, SIGNAL(changed(Oven*)), SLOT(updateView())); | 15 | + connect(oven, SIGNAL(changed(Oven*)), SLOT(onOvenChanged())); |
16 | 16 | ||
17 | showCurrentHumidityTimer.setSingleShot(true); | 17 | showCurrentHumidityTimer.setSingleShot(true); |
18 | showCurrentHumidityTimer.setInterval(3000); | 18 | showCurrentHumidityTimer.setInterval(3000); |
@@ -22,6 +22,10 @@ PreheatPopup::PreheatPopup(QWidget *parent, Oven *oven) : | @@ -22,6 +22,10 @@ PreheatPopup::PreheatPopup(QWidget *parent, Oven *oven) : | ||
22 | showCurrentTempTimer.setInterval(3000); | 22 | showCurrentTempTimer.setInterval(3000); |
23 | connect(&showCurrentTempTimer, SIGNAL(timeout()), SLOT(showCurrentTemp())); | 23 | connect(&showCurrentTempTimer, SIGNAL(timeout()), SLOT(showCurrentTemp())); |
24 | 24 | ||
25 | + ui->preheatGauge->setMaximum(oven->temp()); | ||
26 | + ui->preheatGauge->setMinimum(oven->currentTemp()); | ||
27 | + ui->preheatGauge->setValue(oven->currentTemp()); | ||
28 | + | ||
25 | start(); | 29 | start(); |
26 | } | 30 | } |
27 | 31 | ||
@@ -63,6 +67,8 @@ void PreheatPopup::updateView() | @@ -63,6 +67,8 @@ void PreheatPopup::updateView() | ||
63 | 67 | ||
64 | ui->humidityLabel->setText(QString().sprintf("%d%%", humidity)); | 68 | ui->humidityLabel->setText(QString().sprintf("%d%%", humidity)); |
65 | ui->heatLabel->setText(QString().sprintf("%d℃", temp)); | 69 | ui->heatLabel->setText(QString().sprintf("%d℃", temp)); |
70 | + | ||
71 | + ui->preheatGauge->setValue(oven->currentTemp()); | ||
66 | } | 72 | } |
67 | 73 | ||
68 | void PreheatPopup::start() | 74 | void PreheatPopup::start() |
@@ -89,6 +95,17 @@ void PreheatPopup::showCurrentTemp() | @@ -89,6 +95,17 @@ void PreheatPopup::showCurrentTemp() | ||
89 | updateView(); | 95 | updateView(); |
90 | } | 96 | } |
91 | 97 | ||
98 | +void PreheatPopup::onOvenChanged() | ||
99 | +{ | ||
100 | + if (oven->currentHumidity() >= oven->humidity() && oven->currentTemp() >= oven->temp()) | ||
101 | + { | ||
102 | + stop(); | ||
103 | + close(); | ||
104 | + } | ||
105 | + else | ||
106 | + updateView(); | ||
107 | +} | ||
108 | + | ||
92 | void PreheatPopup::on_closeButton_clicked() | 109 | void PreheatPopup::on_closeButton_clicked() |
93 | { | 110 | { |
94 | stop(); | 111 | stop(); |
app/gui/oven_control/preheatpopup.h
@@ -26,15 +26,14 @@ private slots: | @@ -26,15 +26,14 @@ private slots: | ||
26 | void showCurrentHumidity(); | 26 | void showCurrentHumidity(); |
27 | void showCurrentTemp(); | 27 | void showCurrentTemp(); |
28 | 28 | ||
29 | + void onOvenChanged(); | ||
30 | + | ||
29 | void on_closeButton_clicked(); | 31 | void on_closeButton_clicked(); |
30 | void on_closeButton_2_clicked(); | 32 | void on_closeButton_2_clicked(); |
31 | 33 | ||
32 | void on_humidityGaugeButton_pressed(); | 34 | void on_humidityGaugeButton_pressed(); |
33 | - | ||
34 | void on_humidityGaugeButton_released(); | 35 | void on_humidityGaugeButton_released(); |
35 | - | ||
36 | void on_heatGaugeButton_pressed(); | 36 | void on_heatGaugeButton_pressed(); |
37 | - | ||
38 | void on_heatGaugeButton_released(); | 37 | void on_heatGaugeButton_released(); |
39 | 38 | ||
40 | private: | 39 | private: |