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 | 20 | |
21 | 21 | oven = new Oven(this); |
22 | 22 | |
23 | - OvenController *interface = new OvenController; | |
23 | + OvenController *interface = new OvenController(this, oven); | |
24 | 24 | oven->setInterface(interface); |
25 | 25 | |
26 | 26 | udp = new UdpHandler(this); | ... | ... |
app/gui/oven_control/oven.cpp
... | ... | @@ -7,6 +7,10 @@ Oven::Oven(QObject *parent) : QObject(parent) |
7 | 7 | { |
8 | 8 | interface = NULL; |
9 | 9 | |
10 | + currentHumidity_ = 0; | |
11 | + currentTemp_ = 0; | |
12 | + currentInterTemp_ = 0; | |
13 | + | |
10 | 14 | cookingTimer.setSingleShot(true); |
11 | 15 | connect(&cookingTimer, SIGNAL(timeout()), this, SLOT(stopCooking())); |
12 | 16 | |
... | ... | @@ -83,7 +87,6 @@ void Oven::setDefault(Mode mode) |
83 | 87 | cooldown_ = false; |
84 | 88 | damper_ = false; |
85 | 89 | humidification_ = false; |
86 | - washing_ = false; | |
87 | 90 | door_ = interface->door(); |
88 | 91 | paused_ = false; |
89 | 92 | |
... | ... | @@ -285,26 +288,30 @@ void Oven::stop() |
285 | 288 | |
286 | 289 | if (humidification()) |
287 | 290 | stopHumidification(); |
288 | - | |
289 | - if (washing()) | |
290 | - stopWashing(); | |
291 | 291 | } |
292 | 292 | |
293 | 293 | void Oven::startCooking() |
294 | 294 | { |
295 | - paused_ = false; | |
296 | - | |
297 | 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 | 316 | emit changed(this); |
310 | 317 | } |
... | ... | @@ -334,6 +341,9 @@ void Oven::startPreheating() |
334 | 341 | { |
335 | 342 | if (preheatingStartable()) |
336 | 343 | { |
344 | + if (cooking()) | |
345 | + stopCooking(); | |
346 | + | |
337 | 347 | preheating_ = true; |
338 | 348 | interface->startPreheating(); |
339 | 349 | |
... | ... | @@ -349,6 +359,9 @@ void Oven::stopPreheating() |
349 | 359 | interface->stopPreheating(); |
350 | 360 | |
351 | 361 | emit changed(this); |
362 | + | |
363 | + if (paused()) | |
364 | + startCooking(); | |
352 | 365 | } |
353 | 366 | } |
354 | 367 | |
... | ... | @@ -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 | 424 | if (!damper()) |
422 | 425 | { |
423 | 426 | damper_ = true; |
424 | - damperTimer.start(5 * 60 * 1000); | |
425 | 427 | interface->openDamper(); |
426 | 428 | |
427 | 429 | emit changed(this); |
428 | 430 | } |
431 | + | |
432 | + damperTimer.start(secs * 1000); | |
429 | 433 | } |
430 | 434 | |
431 | 435 | 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 | 554 | emit changed(this); |
524 | 555 | |
525 | 556 | if (cooking()) |
557 | + { | |
526 | 558 | stopCooking(); |
559 | + openDamper(7); | |
560 | + } | |
527 | 561 | } |
528 | 562 | |
529 | 563 | void Oven::onDoorClosed() |
... | ... | @@ -532,6 +566,9 @@ void Oven::onDoorClosed() |
532 | 566 | |
533 | 567 | emit changed(this); |
534 | 568 | |
535 | - if (paused()) | |
569 | + if (!cooldown() && paused()) | |
536 | 570 | startCooking(); |
571 | + | |
572 | + if (damper()) | |
573 | + closeDamper(); | |
537 | 574 | } | ... | ... |
app/gui/oven_control/oven.h
... | ... | @@ -66,7 +66,10 @@ private: |
66 | 66 | bool damper_ = false; // true: open, false: close |
67 | 67 | bool humidification_ = false; |
68 | 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 | 75 | bool paused_; |
... | ... | @@ -95,12 +98,11 @@ public: |
95 | 98 | bool damper() { return damper_; } |
96 | 99 | bool humidification() { return humidification_; } |
97 | 100 | bool door() { return door_; } |
98 | - bool washing() { return washing_; } | |
99 | 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 | 107 | bool cookingStartable(); |
106 | 108 | bool preheatingStartable(); |
... | ... | @@ -139,12 +141,13 @@ public slots: |
139 | 141 | void stopCooldown(); |
140 | 142 | void startHumidification(); |
141 | 143 | void stopHumidification(); |
142 | - void startWashing(); | |
143 | - void stopWashing(); | |
144 | 144 | |
145 | - void openDamper(); | |
145 | + void openDamper(int secs = 300); | |
146 | 146 | void closeDamper(); |
147 | 147 | |
148 | + void setCurrentHumidity(int percentage); | |
149 | + void setCurrentTemp(int celsius); | |
150 | + void setCurrentInterTemp(int celsius); | |
148 | 151 | |
149 | 152 | void setInterface(OvenInterface *interface); |
150 | 153 | ... | ... |
app/gui/oven_control/ovencontroller.cpp
1 | 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 | 6 | bzero(&control, sizeof(control)); |
6 | 7 | bzero(&state, sizeof(state)); |
... | ... | @@ -29,6 +30,10 @@ void OvenController::onDataChanged() |
29 | 30 | if (state.door_state != 0) |
30 | 31 | emit doorOpened(); |
31 | 32 | } |
33 | + | |
34 | + oven->setCurrentHumidity(currentHumidity()); | |
35 | + oven->setCurrentTemp(currentTemp()); | |
36 | + oven->setCurrentInterTemp(currentInterTemp()); | |
32 | 37 | } |
33 | 38 | |
34 | 39 | int OvenController::currentTemp() |
... | ... | @@ -92,7 +97,7 @@ void OvenController::stopCooking() |
92 | 97 | |
93 | 98 | void OvenController::startPreheating() |
94 | 99 | { |
95 | - udp->set(TG_OVEN_MODE, 0); | |
100 | + udp->set(TG_OVEN_MODE, 1); | |
96 | 101 | udp->set(TG_TIME, 1440); |
97 | 102 | udp->turnOn(TG_SYSTEM); |
98 | 103 | udp->turnOn(TG_PREHEAT); |
... | ... | @@ -135,10 +140,10 @@ void OvenController::stopWashing() |
135 | 140 | |
136 | 141 | void OvenController::openDamper() |
137 | 142 | { |
138 | - | |
143 | + udp->turnOn(TG_OUTHUMIDITY); | |
139 | 144 | } |
140 | 145 | |
141 | 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 | 9 | { |
10 | 10 | Q_OBJECT |
11 | 11 | |
12 | + Oven *oven; | |
12 | 13 | UdpHandler *udp; |
13 | 14 | oven_control_t control; |
14 | 15 | oven_state_t state; |
15 | 16 | |
16 | 17 | public: |
17 | - OvenController(QObject *parent = 0); | |
18 | + OvenController(QObject *parent = 0, Oven *oven = 0); | |
18 | 19 | |
19 | 20 | void setUdpHandler(UdpHandler *udp); |
20 | 21 | int currentTemp(); | ... | ... |
app/gui/oven_control/preheatpopup.cpp
... | ... | @@ -12,7 +12,7 @@ PreheatPopup::PreheatPopup(QWidget *parent, Oven *oven) : |
12 | 12 | |
13 | 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 | 17 | showCurrentHumidityTimer.setSingleShot(true); |
18 | 18 | showCurrentHumidityTimer.setInterval(3000); |
... | ... | @@ -22,6 +22,10 @@ PreheatPopup::PreheatPopup(QWidget *parent, Oven *oven) : |
22 | 22 | showCurrentTempTimer.setInterval(3000); |
23 | 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 | 29 | start(); |
26 | 30 | } |
27 | 31 | |
... | ... | @@ -63,6 +67,8 @@ void PreheatPopup::updateView() |
63 | 67 | |
64 | 68 | ui->humidityLabel->setText(QString().sprintf("%d%%", humidity)); |
65 | 69 | ui->heatLabel->setText(QString().sprintf("%d℃", temp)); |
70 | + | |
71 | + ui->preheatGauge->setValue(oven->currentTemp()); | |
66 | 72 | } |
67 | 73 | |
68 | 74 | void PreheatPopup::start() |
... | ... | @@ -89,6 +95,17 @@ void PreheatPopup::showCurrentTemp() |
89 | 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 | 109 | void PreheatPopup::on_closeButton_clicked() |
93 | 110 | { |
94 | 111 | stop(); | ... | ... |
app/gui/oven_control/preheatpopup.h
... | ... | @@ -26,15 +26,14 @@ private slots: |
26 | 26 | void showCurrentHumidity(); |
27 | 27 | void showCurrentTemp(); |
28 | 28 | |
29 | + void onOvenChanged(); | |
30 | + | |
29 | 31 | void on_closeButton_clicked(); |
30 | 32 | void on_closeButton_2_clicked(); |
31 | 33 | |
32 | 34 | void on_humidityGaugeButton_pressed(); |
33 | - | |
34 | 35 | void on_humidityGaugeButton_released(); |
35 | - | |
36 | 36 | void on_heatGaugeButton_pressed(); |
37 | - | |
38 | 37 | void on_heatGaugeButton_released(); |
39 | 38 | |
40 | 39 | private: | ... | ... |