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: | ... | ... |