From 2801671cedc0cf2b71d1cc1c1e772386684debec Mon Sep 17 00:00:00 2001 From: IMback Date: Tue, 9 Oct 2018 18:40:55 +0200 Subject: [PATCH] init branch --- alarmsettingsdialog.cpp | 42 ++++++++++++++++++++++++-- alarmsettingsdialog.h | 23 +++++++++++++- alarmtime.cpp | 10 ++---- alarmtime.h | 3 +- ampmanager.h | 6 ++-- main.cpp | 52 +++++++++++++++----------------- mainwindow.cpp | 67 +++++++++-------------------------------- mainwindow.h | 21 ++----------- microcontroller.cpp | 67 +++++++++++++++++++++++++++++++---------- microcontroller.h | 21 +++++++++++-- relay.h | 48 +++++++++++++++++++++++------ relaydialog.cpp | 19 +++++++++--- relaydialog.h | 2 +- 13 files changed, 232 insertions(+), 149 deletions(-) diff --git a/alarmsettingsdialog.cpp b/alarmsettingsdialog.cpp index c5ede00..54471db 100644 --- a/alarmsettingsdialog.cpp +++ b/alarmsettingsdialog.cpp @@ -1,14 +1,50 @@ #include "alarmsettingsdialog.h" #include "ui_alarmsettingsdialog.h" -AlarmSettingsDialog::AlarmSettingsDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::AlarmSettingsDialog) +#include + +AlarmSettingsDialog::AlarmSettingsDialog(AlarmTime* almNight, AlarmTime* almAlarm, QSettings* settings, QWidget *parent): QDialog(parent), ui(new Ui::AlarmSettingsDialog), almNight_(almNight), almAlarm_(almAlarm), settings_(settings) { ui->setupUi(this); + + //restore settings + ui->checkBox_Alarm->setChecked(settings_->value("Alarms/alarmOn").toBool()); + ui->checkBox_Sunrise->setChecked(settings_->value("Alarms/sunrise").toBool()); + ui->timeEdit_Shutdown->setTime(settings_->value("Alarms/shutdownTime").toTime()); + ui->timeEdit_Alarm->setTime(settings_->value("Alarms/alarmTime").toTime()); + ui->lineEdit->setText(settings_->value("Alarms/alarmSoundFile").toString()); + + connect(ui->pushButton_changeFile, SIGNAL(clicked()), this, SLOT(showFileChooser())); } AlarmSettingsDialog::~AlarmSettingsDialog() { delete ui; } + +void AlarmSettingsDialog::accept() +{ + //store settings + settings_->setValue("Alarms/alarmOn", ui->checkBox_Alarm->checkState()); + settings_->setValue("Alarms/sunrise", ui->checkBox_Sunrise->checkState()); + settings_->setValue("Alarms/shutdownTime", ui->timeEdit_Shutdown->time()); + settings_->setValue("Alarms/alarmTime", ui->timeEdit_Alarm->time()); + settings_->setValue("Alarms/alarmSoundFile", ui->lineEdit->text()); + + //send signals + signalAlarmSoundFile(ui->lineEdit->text()); + signalSunrise(ui->checkBox_Sunrise->checkState()); + + //modify alarm objects + almAlarm_->changeTime(ui->timeEdit_Alarm->time()); + almNight_->changeTime(ui->timeEdit_Shutdown->time()); + + QDialog::accept(); +} + +void AlarmSettingsDialog::showFileChooser() +{ + ui->lineEdit->setText(QFileDialog::getOpenFileName(this)); +} + + diff --git a/alarmsettingsdialog.h b/alarmsettingsdialog.h index 1970816..1e2997d 100644 --- a/alarmsettingsdialog.h +++ b/alarmsettingsdialog.h @@ -2,6 +2,11 @@ #define ALARMSETTINGSDIALOG_H #include +#include +#include +#include + +#include "alarmtime.h" namespace Ui { class AlarmSettingsDialog; @@ -11,10 +16,26 @@ class AlarmSettingsDialog : public QDialog { Q_OBJECT + AlarmTime* almNight_; + AlarmTime* almAlarm_; + QSettings* settings_; + + public: - explicit AlarmSettingsDialog(QWidget *parent = 0); + explicit AlarmSettingsDialog(AlarmTime* almNight, AlarmTime* almAlarm, QSettings* settings, QWidget* parent = nullptr); ~AlarmSettingsDialog(); +signals: + void signalAlarmSoundFile(QString fileName); + void signalSunrise(bool enabled); + +public slots: + void accept(); + +private slots: + void showFileChooser(); + + private: Ui::AlarmSettingsDialog *ui; }; diff --git a/alarmtime.cpp b/alarmtime.cpp index f55d4ea..cffabf9 100644 --- a/alarmtime.cpp +++ b/alarmtime.cpp @@ -3,8 +3,7 @@ AlarmTime::AlarmTime(const QTime time, QObject *parent) : QObject(parent), time_(time) { connect(&timer, SIGNAL(timeout()), this, SLOT(doTick())); - timer.setInterval(500); - + timer.setInterval(1000); } AlarmTime::~AlarmTime() @@ -15,21 +14,16 @@ AlarmTime::~AlarmTime() void AlarmTime::run() { abort(); - loop.reset(new QEventLoop); timer.start(); qDebug()<<"Start Alarm Time Manager\n"; - loop->exec(); } void AlarmTime::abort() { timer.stop(); - if (!loop.isNull()){ - loop->quit(); - } qDebug()<<"Stop Alarm Time Manager\n"; } @@ -37,7 +31,7 @@ void AlarmTime::doTick() { if(time_.hour() == QTime::currentTime().hour() && time_.minute() == QTime::currentTime().minute() && triggerd_==false ) { - qDebug()<<"Trigger\n"; + qDebug()<<"Trigger\n"; triggerd_=true; trigger(); } diff --git a/alarmtime.h b/alarmtime.h index 4c06a28..f2ae515 100644 --- a/alarmtime.h +++ b/alarmtime.h @@ -17,10 +17,9 @@ private: bool triggerd_ = false; QTime time_; QTimer timer; - QScopedPointer loop; public: - explicit AlarmTime(const QTime time = QTime::currentTime(), QObject *parent = 0); + explicit AlarmTime(const QTime time = QTime::currentTime(), QObject *parent = nullptr); ~AlarmTime(); signals: diff --git a/ampmanager.h b/ampmanager.h index 4d50ef2..634836d 100644 --- a/ampmanager.h +++ b/ampmanager.h @@ -15,11 +15,11 @@ #include "microcontroller.h" -class AmpManager : public QObject, public QRunnable +class AmpManager : public QObject { Q_OBJECT public: - explicit AmpManager(Microcontroller *micro, int relayNumber, QObject *parent = 0); + explicit AmpManager(Microcontroller *micro, int relayNumber, QObject *parent = nullptr); ~AmpManager(); @@ -27,6 +27,8 @@ public: public slots: void run(); void abort(); + +private slots: void doTick(); private: diff --git a/main.cpp b/main.cpp index 683cd9c..54c5d8e 100644 --- a/main.cpp +++ b/main.cpp @@ -17,7 +17,8 @@ #include "mainwindow.h" #include "relaydialog.h" #include "ampmanager.h" -#include "power.h" +#include "alarmactions.h" +#include "alarmsettingsdialog.h" #define BAUD QSerialPort::Baud38400 @@ -29,7 +30,7 @@ int main(int argc, char *argv[]) QCoreApplication::setOrganizationName("UVOS"); QCoreApplication::setOrganizationDomain("uvos.xyz"); QCoreApplication::setApplicationName("SHinterface"); - QCoreApplication::setApplicationVersion("0.2"); + QCoreApplication::setApplicationVersion("0.5"); QDir::setCurrent(a.applicationDirPath()); @@ -54,8 +55,6 @@ int main(int argc, char *argv[]) QSettings settings; - - //connect to microcontoler Microcontroller micro; if(parser.isSet(tcpOption)) @@ -89,41 +88,38 @@ int main(int argc, char *argv[]) else micro.setIODevice(microPort); } - Power power(&settings, µ); - - - + AlarmActions alarmActions(&settings, µ); AmpManager amp(µ, 0); - MainWindow w(&settings, µ, parser.isSet(secondaryOption)); - QObject::connect(µ, SIGNAL(textRecived(QString)), &w, SLOT(changeHeaderLableText(QString))); - QObject::connect(µ, SIGNAL(relayStateChanged(std::vector)), &w, SLOT(relayStateChanged(std::vector))); - - RelayDialog relayDialog(µ); - QObject::connect(µ, SIGNAL(relayStateChanged(std::vector)), &relayDialog, SLOT(relayStateChanged(std::vector))); - //Alarms AlarmTime almNight(settings.value("nightTime").toTime()); + AlarmTime almAlarm(settings.value("alarmTime").toTime()); - AlarmTime *almAlarm = new AlarmTime(settings.value("alarmTime").toTime()); - QSignalMapper signalMapper; + //mainwindow + MainWindow w(µ, parser.isSet(secondaryOption)); + QObject::connect(µ, SIGNAL(textRecived(QString)), &w, SLOT(changeHeaderLableText(QString))); + QObject::connect(µ, SIGNAL(relayStateChanged(std::vector)), &w, SLOT(relayStateChanged(std::vector))); + QObject::connect(µ, SIGNAL(auxStateChanged(int)), &w, SLOT(auxStateChanged(int))); + + //dialogs + AlarmSettingsDialog alarmDialog(&almNight, &almAlarm, &settings, &w); + + RelayDialog relayDialog(µ, &w); + QObject::connect(µ, SIGNAL(relayStateChanged(std::vector)), &relayDialog, SLOT(relayStateChanged(std::vector))); if(!parser.isSet(secondaryOption)) { - QObject::connect(&almNight, SIGNAL(trigger()), &power, SLOT(syncoff())); + QObject::connect(&almNight, SIGNAL(trigger()), &alarmActions, SLOT(syncoff())); QObject::connect(&w, SIGNAL(signalAlmNightChanged(QTime)), &almNight, SLOT(changeTime(QTime))); QObject::connect(&w, SIGNAL(signalAlmNightStateChanged(int)), &almNight, SLOT(runOrAbort(int))); - //QMetaObject::invokeMethod(&almNight, "run", Qt::QueuedConnection ); + almNight.run(); - - QObject::connect(almAlarm, SIGNAL(trigger()), &signalMapper, SLOT(map())); - signalMapper.setMapping(almAlarm, 4); - QObject::connect(&signalMapper, SIGNAL(mapped(int)), µ, SLOT(setPattern(int))); - QObject::connect(&w, SIGNAL(signalAlmAlarmChanged(QTime)), almAlarm, SLOT(changeTime(QTime))); - QObject::connect(&w, SIGNAL(signalAlmAlarmStateChanged(int)), almAlarm, SLOT(runOrAbort(int))); - //QMetaObject::invokeMethod(almAlarm, "run", Qt::QueuedConnection ); + QObject::connect(&almAlarm, &AlarmTime::trigger, µ, &Microcontroller::startSunrise); + QObject::connect(&w, SIGNAL(signalAlmAlarmChanged(QTime)), &almAlarm, SLOT(changeTime(QTime))); + QObject::connect(&w, SIGNAL(signalAlmAlarmStateChanged(int)), &almAlarm, SLOT(runOrAbort(int))); + almAlarm.run(); //Amplifyer QObject::connect(&w, SIGNAL(signalAmpOn()), &, SLOT(run())); @@ -131,12 +127,12 @@ int main(int argc, char *argv[]) QMetaObject::invokeMethod(&, "run", Qt::QueuedConnection ); } - //Advanced Relays + //show dialogs QObject::connect(&w, SIGNAL(showAdvRelayDialog()), &relayDialog, SLOT(show())); + QObject::connect(&w, &MainWindow::showAlmSettingsDialog, &alarmDialog, &AlarmSettingsDialog::show); QMetaObject::invokeMethod(µ, "run", Qt::QueuedConnection ); - QMetaObject::invokeMethod(&w, "postActivate", Qt::QueuedConnection ); w.show(); return a.exec(); diff --git a/mainwindow.cpp b/mainwindow.cpp index 549845b..db8d891 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,21 +1,16 @@ #include "mainwindow.h" #include "ui_mainwindow.h" -MainWindow::MainWindow(QSettings *settings, Microcontroller *micro , bool isRemoteMode , QWidget *parent) : +MainWindow::MainWindow(Microcontroller *micro , bool isRemoteMode , QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), colorChooser(this), - _settings(settings), _micro(micro) { ui->setupUi(this); if(!_micro->connected()) ui->label_serialRecive->setText("No IO Port! Debug only."); - //Settings - ui->alarmTime->setTime(_settings->value("alarmTime").toTime()); - ui->nightTime->setTime(_settings->value("nightTime").toTime()); - ui->checkBox_alarm->setChecked(_settings->value("alarmOn").toBool()); //RGB Leds connect(ui->presettApply, SIGNAL(clicked()), this, SLOT(slotApplyPreset())); @@ -32,11 +27,16 @@ MainWindow::MainWindow(QSettings *settings, Microcontroller *micro , bool isRemo new QListWidgetItem(tr("Pattern 4 Sunrise"), ui->listWidget_patern); + //Desk light + + connect(ui->horizontalSlider_deskLight, &QAbstractSlider::valueChanged, _micro, [this](int value){ _micro->setAuxPwm(value); }); + //Relays _relayCheckBoxes.push_back(ui->checkBox_amp); _relayCheckBoxes.push_back(ui->checkBox_bspeaker); _relayCheckBoxes.push_back(ui->checkBox_inf); - _relayCheckBoxes.push_back(ui->checkBox_aircon); + _relayCheckBoxes.push_back(ui->checkBox_SolderingIorn); + _relayCheckBoxes.push_back(ui->checkBox_testEquitmpent); for(unsigned int i = 0; i < _relayCheckBoxes.size(); i++) connect(_relayCheckBoxes[i], SIGNAL(stateChanged(int)), this, SLOT(relayCheckBoxToggeled(int))); @@ -47,37 +47,17 @@ MainWindow::MainWindow(QSettings *settings, Microcontroller *micro , bool isRemo //Bedroom Speakers if(!isRemoteMode)connect(ui->checkBox_bspeakerAuto, SIGNAL(stateChanged(int)), this, SLOT(slotBSpeakerAutoToggle(int))); - //Infinity Mirror if(!isRemoteMode)connect(ui->checkBox_infAuto, SIGNAL(stateChanged(int)), this, SLOT(slotInfMirrorAutoToggle(int))); - - if(!isRemoteMode) - { - //Alarm - connect(ui->alarmTime, SIGNAL(timeChanged(QTime)), this, SLOT(slotChangedAlarmTime(QTime))); - connect(ui->checkBox_alarm, SIGNAL(stateChanged(int)), this, SIGNAL(signalAlmAlarmStateChanged(int))); - connect(ui->checkBox_alarm, SIGNAL(stateChanged(int)), this, SLOT(saveAlarmState(int))); - - - - //Night Time - connect(ui->nightTime, SIGNAL(timeChanged(QTime)), this, SLOT(slotChangedNightTime(QTime))); - connect(ui->checkBox_nightTime, SIGNAL(stateChanged(int)), this, SIGNAL(signalAlmNightStateChanged(int))); - } else remoteMode(); - //adv relays + + //dialogs connect(ui->button_advRelay, SIGNAL(clicked()), this, SIGNAL(showAdvRelayDialog())); + connect(ui->pushButton_alarms, SIGNAL(clicked()), this, SIGNAL(showAlmSettingsDialog())); } void MainWindow::remoteMode() { - ui->alarmTime->setEnabled(false); - ui->checkBox_alarm->setEnabled(false); - ui->pushButton_alarm->setEnabled(false); - - ui->nightTime->setEnabled(false); - ui->checkBox_nightTime->setEnabled(false); - ui->label_nightTime->setEnabled(false); ui->checkBox_ampAuto->setEnabled(false); ui->checkBox_ampAuto->setChecked(false); @@ -90,15 +70,8 @@ void MainWindow::remoteMode() ui->checkBox_infAuto->setChecked(false); } -void MainWindow::postActivate() -{ - QMetaObject::invokeMethod( this, "signalAlmNightStateChanged", Qt::QueuedConnection, Q_ARG(int, ui->checkBox_nightTime->checkState()) ); - signalAlmAlarmStateChanged(ui->checkBox_alarm->checkState()); -} - MainWindow::~MainWindow() { - _settings->sync(); delete ui; } @@ -145,7 +118,7 @@ void MainWindow::slotBSpeakerAutoToggle(int state) void MainWindow::slotDoorOpenTimeout() { - ui->checkBox_doorOpen->setChecked(true); + //ui->checkBox_doorOpen->setChecked(true); } void MainWindow::slotInfMirrorAutoToggle(int state) @@ -157,21 +130,11 @@ void MainWindow::slotInfMirrorAutoToggle(int state) } } -void MainWindow::slotChangedAlarmTime(const QTime time) +void MainWindow::auxStateChanged(int value) { - _settings->setValue("alarmTime", time); - signalAlmAlarmChanged(time); -} - -void MainWindow::saveAlarmState(int state) -{ - _settings->setValue("alarmOn", state); -} - -void MainWindow::slotChangedNightTime(const QTime time) -{ - _settings->setValue("nightTime", time); - signalAlmNightChanged(time); + ui->horizontalSlider_deskLight->blockSignals(true); + ui->horizontalSlider_deskLight->setValue(value); + ui->horizontalSlider_deskLight->blockSignals(false); } void MainWindow::slotAmpAutoToggle(int state) diff --git a/mainwindow.h b/mainwindow.h index 23140a2..a8dce36 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -4,7 +4,6 @@ #include #include #include -#include #include #include #include "alarmtime.h" @@ -21,7 +20,7 @@ class MainWindow : public QMainWindow Q_OBJECT public: - explicit MainWindow(QSettings *settings, Microcontroller *micro, bool isRemoteMode = false, QWidget *parent = 0); + explicit MainWindow(Microcontroller *micro, bool isRemoteMode = false, QWidget *parent = nullptr); ~MainWindow(); @@ -31,8 +30,6 @@ private: QColorDialog colorChooser; - QSettings *_settings; - Microcontroller *_micro; std::vector _relayCheckBoxes; @@ -44,18 +41,12 @@ signals: void signalAmpOn(); void signalAmpOff(); - void signalAlmNightStateChanged(int state); - void signalAlmNightChanged(const QTime time); - - void signalAlmAlarmStateChanged(int state); - void signalAlmAlarmChanged(const QTime time); + void showAlmSettingsDialog(); void showAdvRelayDialog(); private slots: - void postActivate(); - //RGB void slotChangedRgb(const QColor color); void slotApplyPreset(); @@ -70,19 +61,13 @@ private slots: void slotBSpeakerAutoToggle(int state); void slotInfMirrorAutoToggle(int state); - //Alarm - void slotChangedAlarmTime(const QTime time); - void saveAlarmState(int state); - - //Night - void slotChangedNightTime(const QTime time); - //door void slotDoorOpenTimeout(); public slots: void relayStateChanged(std::vector relayStates); + void auxStateChanged(int value); }; diff --git a/microcontroller.cpp b/microcontroller.cpp index 4cc1643..f943910 100644 --- a/microcontroller.cpp +++ b/microcontroller.cpp @@ -3,7 +3,7 @@ //relays void Microcontroller::relayToggle(int state, int relay) -{ +{ char buffer[8]; int length = sprintf(buffer, "%d \n", relay); if(_port != nullptr) state ? _port->write("relay on ", sizeof("relay on ")-1) : _port->write("relay off ", sizeof("relay off ")-1); @@ -42,13 +42,37 @@ void Microcontroller::changeRgbColor(const QColor color) std::cout< 1) + { + if(_auxState <= 1 && _port != nullptr) _port->write("aux on\n"); + char buffer[64]; + int length = sprintf(buffer, "aux set %03d \n", duty ); + if(_port != nullptr) _port->write(buffer, length); + } + else if(_port != nullptr)_port->write("aux off\n"); + } + _auxState = duty; +} + void Microcontroller::setPattern(int pattern) { - char buffer[4]; - std::cout<<"pattern apply\n"; - _port->write("rgb pattern ", sizeof("rgb pattern ")-1); - int length = sprintf(buffer, "%d \n", pattern); - _port->write(buffer, length); + if(_port != nullptr) + { + char buffer[4]; + std::cout<<"pattern apply\n"; + _port->write("rgb pattern ", sizeof("rgb pattern ")-1); + int length = sprintf(buffer, "%d \n", pattern); + _port->write(buffer, length); + } +} + +void Microcontroller::startSunrise() +{ + setPattern(4); } bool Microcontroller::connected() @@ -72,9 +96,13 @@ void Microcontroller::run() void Microcontroller::requestState() { - if(_port != nullptr) _port->write("relay state\n", sizeof("relay state\n")); + if(_port != nullptr) _port->write("state\n", sizeof("state\n")); } +void Microcontroller::requestRelayList() +{ + if(_port != nullptr) _port->write("relay list\n", sizeof("relay list\n")); +} void Microcontroller::abort() { @@ -121,20 +149,27 @@ void Microcontroller::processMicroReturn() workbuff.remove(0, 2); QStringList workbufList = workbuff.split(','); - int numberOfRelays = workbufList[0].toInt(); - if(workbufList.size() >= numberOfRelays+1) + + //aux state + if(workbufList[0].toInt() != _auxState) + { + _auxState = workbufList[0].toInt(); + auxStateChanged(_auxState); + } + + //relay state + uint_fast8_t numberOfRelays = workbufList[1].toInt(); + if(workbufList.size() >= numberOfRelays+2) { - bool hasChanged = false; _relayStates.resize(numberOfRelays, false); - for(int i = 0; i < numberOfRelays; i++) + for(uint_fast8_t i = 0; i < numberOfRelays; i++) { - if(_relayStates[i] != (bool)workbufList[i+1].toInt()) + if(_relayStates[i] != static_cast(workbufList[i+2].toInt())) { - _relayStates[i] = (bool)workbufList[i+1].toInt(); - hasChanged = true; + _relayStates[i] = static_cast(workbufList[i+2].toInt()); + relayStateChanged(Relay(this, i)); } } - if(hasChanged)relayStateChanged(_relayStates); } } else if(workbuff.contains("Door Open Warning")) @@ -143,7 +178,7 @@ void Microcontroller::processMicroReturn() } else if(workbuff.size() > 2 && workbuff[0]=='D' && workbuff[1]=='2') { - if(workbuff[3] == 'O') doorOpen(1); + if(workbuff[3] == 'O') doorOpened(1); else if(workbuff[3] == 'C') doorClosed(1); } } diff --git a/microcontroller.h b/microcontroller.h index 8b383af..bea798d 100644 --- a/microcontroller.h +++ b/microcontroller.h @@ -13,13 +13,21 @@ #include #include #include +#include "relay.h" -class Microcontroller: public QObject +class Microcontroller : public QObject { + Q_OBJECT + +public: + + static constexpr char AMP_RELAY = 0; + private: std::vector _relayStates; //ugh vector of bools + int _auxState = 0; QIODevice* _port = nullptr; QScopedPointer loop; @@ -41,10 +49,15 @@ public slots: void rgbOff(); void changeRgbColor(const QColor color); void setPattern(int pattern); + void startSunrise(); + + void requestRelayList(); + + void setAuxPwm(int duty); - void relayToggle(int state, int id); void relayOn(int relay); void relayOff(int relay); + void relayToggle(bool state, int id); void run(); void abort(); @@ -52,7 +65,9 @@ public slots: signals: void textRecived(const QString string); - void relayStateChanged(std::vector relayStates); + void relayStateChanged(Relay relay); + void auxStateChanged(int value); + void gotRelayList(std::vector relays); void doorOpenTimeout(); void doorOpened(int id); void doorClosed(int id); diff --git a/relay.h b/relay.h index b9d5f87..4f8739d 100644 --- a/relay.h +++ b/relay.h @@ -1,14 +1,42 @@ -#pragma once +#ifndef RELAY_H +#define RELAY_H -#include "serial_io.h" +#include +#include +#include +#include +#include -static void relay_toggle(bool state, int id, int serial) +#include"actor.h" + +class Microcontroller; + +class Relay : public QObject { - char buffer[8]; - int length = sprintf(buffer, "%d \n", id); - state ? write(serial, "relay on ", sizeof("relay on ")-1) : write(serial, "relay off ", sizeof("relay off ")-1); - state ? std::cout<<"relay on " : std::cout<<"relay off "; - std::cout< > actors_; + bool actorsActive_ = true; +public slots: + void on(); + void off(); + void toggle(); + +public: + Relay(Microcontroller* micro, uint8_t id, QString name = "", uint16_t address = 0, QObject *parent = nullptr); + void addActor(std::unique_ptr actor); + void setState(bool state); + bool hasActors(); + void setActorsActive(bool in); + QString getName(); + void setName(QString name); + std::vector< std::unique_ptr >* getActors(); + ~Relay(); +}; +#endif // RELAY_H diff --git a/relaydialog.cpp b/relaydialog.cpp index 6e20ed7..4022210 100644 --- a/relaydialog.cpp +++ b/relaydialog.cpp @@ -10,13 +10,10 @@ RelayDialog::RelayDialog(Microcontroller *micro, QWidget *parent) : _relayCheckBoxes.push_back(ui->checkBox_R0); _relayCheckBoxes.push_back(ui->checkBox_R1); - _relayCheckBoxes.push_back(ui->checkBox_R2); - _relayCheckBoxes.push_back(ui->checkBox_R3); for(unsigned int i = 0; i < _relayCheckBoxes.size(); i++) connect(_relayCheckBoxes[i], SIGNAL(stateChanged(int)), this, SLOT(relayCheckBoxToggeled(int))); _micro->relayOn(STARTING_RELAY); - _micro->relayOn(STARTING_RELAY+1); } @@ -29,12 +26,24 @@ RelayDialog::~RelayDialog() void RelayDialog::relayCheckBoxToggeled(int state) { for(unsigned int i = 0; i < _relayCheckBoxes.size(); i++) - if(_relayCheckBoxes[i] == sender())_micro->relayToggle(state, i+STARTING_RELAY); + { + + if(_relayCheckBoxes[i] == sender()) + { + std::cerr<relayOff(STARTING_RELAY); _relayCheckBoxes[0]->setChecked(false);}); + } + _micro->relayToggle(state, i+STARTING_RELAY); + } + } } void RelayDialog::relayStateChanged(std::vector relayStates) { - if(relayStates.size() >= STARTING_RELAY+4) for(unsigned int i = 0; i < _relayCheckBoxes.size(); i++) + if(relayStates.size() > STARTING_RELAY) for(unsigned int i = 0; i < relayStates.size()-STARTING_RELAY; i++) { _relayCheckBoxes[i]->blockSignals(true); _relayCheckBoxes[i]->setChecked(relayStates[i+STARTING_RELAY]); diff --git a/relaydialog.h b/relaydialog.h index 299c8d7..85d10d5 100644 --- a/relaydialog.h +++ b/relaydialog.h @@ -7,7 +7,7 @@ #include #include "microcontroller.h" -#define STARTING_RELAY 4 +#define STARTING_RELAY 5 namespace Ui { class RelayDialog;