Commit 6eb13ba2e37b439fc99e3d8b5e28b40c181bbb56

Authored by 김태훈
1 parent 50e20e69fd
Exists in master and in 2 other branches fhd, fhd-demo

예열 팝업 동작 보완 및 동작 정의 변경

- 현재 온도에 따라 예열 게이지 상태 변환
 - 현재 온도가 목표 예열 온도에 도달하면 예열 중단 후 복귀
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:
... ...