From 037e8a9bc7025e87d19a8ca5c97d17209378e24b Mon Sep 17 00:00:00 2001 From: Georgi Tushev Date: Fri, 21 Dec 2018 16:06:02 +0100 Subject: [PATCH] add microtome and syringe --- BrainATUMtome/BrainATUMtome.pro | 8 +++- BrainATUMtome/mainwindow.cpp | 82 +++++++++++++++++++++++++++++++-- BrainATUMtome/mainwindow.h | 30 ++++++++++-- BrainATUMtome/microtome.cpp | 31 +++++++++++++ BrainATUMtome/microtome.h | 26 +++++++++++ BrainATUMtome/syringe.cpp | 21 +++++++++ BrainATUMtome/syringe.h | 26 +++++++++++ 7 files changed, 215 insertions(+), 9 deletions(-) create mode 100644 BrainATUMtome/microtome.cpp create mode 100644 BrainATUMtome/microtome.h create mode 100644 BrainATUMtome/syringe.cpp create mode 100644 BrainATUMtome/syringe.h diff --git a/BrainATUMtome/BrainATUMtome.pro b/BrainATUMtome/BrainATUMtome.pro index 53ddb8e..922c1a7 100644 --- a/BrainATUMtome/BrainATUMtome.pro +++ b/BrainATUMtome/BrainATUMtome.pro @@ -28,12 +28,16 @@ SOURCES += \ main.cpp \ mainwindow.cpp \ eventlog.cpp \ - epos.cpp + epos.cpp \ + microtome.cpp \ + syringe.cpp HEADERS += \ mainwindow.h \ eventlog.h \ - epos.h + epos.h \ + microtome.h \ + syringe.h FORMS += \ mainwindow.ui diff --git a/BrainATUMtome/mainwindow.cpp b/BrainATUMtome/mainwindow.cpp index 3d36b46..7eed3ba 100644 --- a/BrainATUMtome/mainwindow.cpp +++ b/BrainATUMtome/mainwindow.cpp @@ -5,17 +5,19 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), m_driverEpos(nullptr), + m_driverMicrotome(nullptr), + m_driverSyringe(nullptr), m_epos_direction_lower(0), m_epos_direction_upper(0), - m_microtome_cuttingSpeed(0), - m_microtome_returnSpeed(0), - m_microtome_feedStep(0), + m_microtome_iscutting(false), m_microtome_sections(0), m_microtome_advanceRemaining(0) { ui->setupUi(this); configure_epos(); + configure_microtome(); + configure_syringe(); } MainWindow::~MainWindow() @@ -47,6 +49,26 @@ void MainWindow::configure_epos() } +void MainWindow::configure_microtome() +{ + m_driverMicrotome = new Microtome(this); + connect(m_driverMicrotome, &Microtome::log, ui->widget_board, &EventLog::on_log); + connect(this, &MainWindow::uirequest_microtome_cuttingMotor, m_driverMicrotome, &Microtome::on_uirequest_cuttingMotor); + connect(this, &MainWindow::uirequest_microtome_cuttingSpeed, m_driverMicrotome, &Microtome::on_uirequest_cuttingSpeed); + connect(this, &MainWindow::uirequest_microtome_returnSpeed, m_driverMicrotome, &Microtome::on_uirequest_returnSpeed); + connect(this, &MainWindow::uirequest_microtome_feedStep, m_driverMicrotome, &Microtome::on_uirequest_feedStep); +} + + +void MainWindow::configure_syringe() +{ + m_driverSyringe = new Syringe(this); + connect(m_driverSyringe, &Syringe::log, ui->widget_board, &EventLog::on_log); + connect(this, &MainWindow::uirequest_syringe_pump, m_driverSyringe, &Syringe::on_uirequest_pump); + connect(this, &MainWindow::uirequest_syringe_auto, m_driverSyringe, &Syringe::on_uirequest_auto); +} + + void MainWindow::on_radioButtonsEposLowerToggled(bool checked) { if (!checked) @@ -185,3 +207,57 @@ void MainWindow::enable_epos_radioButtons(bool state) ui->radioButton_epos_tension_off->setEnabled(state); ui->radioButton_epos_tension_on->setEnabled(state); } + + +void MainWindow::on_spinBox_microtome_cuttingSpeed_editingFinished() +{ + emit uirequest_microtome_cuttingSpeed(ui->spinBox_microtome_cuttingSpeed->value()); +} + + +void MainWindow::on_comboBox_microtome_returnSpeed_activated(int index) +{ + QVector returnSpeed = {10000, 30000, 50000}; + emit uirequest_microtome_returnSpeed(returnSpeed[index]); +} + + +void MainWindow::on_spinBox_microtome_feedStep_editingFinished() +{ + emit uirequest_microtome_feedStep(ui->spinBox_microtome_feedStep->value()); +} + + +void MainWindow::on_pushButton_microtome_cut_clicked() +{ + if (m_microtome_iscutting) + return; + + m_microtome_iscutting = true; + emit ui->spinBox_microtome_cuttingSpeed->editingFinished(); + emit ui->comboBox_microtome_returnSpeed->activated(ui->comboBox_microtome_returnSpeed->currentIndex()); + emit ui->spinBox_microtome_feedStep->editingFinished(); + emit uirequest_microtome_cuttingMotor(m_microtome_iscutting); +} + + +void MainWindow::on_pushButton_microtome_stop_clicked() +{ + if (!m_microtome_iscutting) + return; + + m_microtome_iscutting = false; + emit uirequest_microtome_cuttingMotor(m_microtome_iscutting); +} + + +void MainWindow::on_pushButton_syringe_pump_clicked() +{ + emit uirequest_syringe_pump(); +} + + +void MainWindow::on_checkBox_syringe_auto_toggled(bool checked) +{ + emit uirequest_syringe_auto(checked); +} diff --git a/BrainATUMtome/mainwindow.h b/BrainATUMtome/mainwindow.h index dc56d78..40866f8 100644 --- a/BrainATUMtome/mainwindow.h +++ b/BrainATUMtome/mainwindow.h @@ -6,6 +6,8 @@ #include "eventlog.h" #include "epos.h" +#include "microtome.h" +#include "syringe.h" namespace Ui { class MainWindow; @@ -23,17 +25,19 @@ class MainWindow : public QMainWindow Ui::MainWindow *ui; Epos *m_driverEpos; + Microtome *m_driverMicrotome; + Syringe *m_driverSyringe; int m_epos_direction_lower; int m_epos_direction_upper; - int m_microtome_cuttingSpeed; - int m_microtome_returnSpeed; - int m_microtome_feedStep; + bool m_microtome_iscutting; int m_microtome_sections; int m_microtome_advanceRemaining; - void configure_epos(); void enable_epos_radioButtons(bool state); + void configure_epos(); + void configure_microtome(); + void configure_syringe(); private slots: void on_radioButtonsEposLowerToggled(bool checked); @@ -43,9 +47,27 @@ private slots: void on_spinBox_epos_lower_velocity_editingFinished(); void on_spinBox_epos_upper_velocity_editingFinished(); + void on_spinBox_microtome_cuttingSpeed_editingFinished(); + void on_comboBox_microtome_returnSpeed_activated(int index); + void on_spinBox_microtome_feedStep_editingFinished(); + void on_pushButton_microtome_cut_clicked(); + void on_pushButton_microtome_stop_clicked(); + + void on_pushButton_syringe_pump_clicked(); + + void on_checkBox_syringe_auto_toggled(bool checked); + signals: void uirequest_epos_velocity(int motorid, int velocity); void uirequest_epos_tension(bool state); + + void uirequest_microtome_cuttingMotor(bool state); + void uirequest_microtome_cuttingSpeed(int cuttingSpeed); + void uirequest_microtome_returnSpeed(int returnSpeed); + void uirequest_microtome_feedStep(int feedStep); + + void uirequest_syringe_pump(); + void uirequest_syringe_auto(bool state); }; #endif // MAINWINDOW_H diff --git a/BrainATUMtome/microtome.cpp b/BrainATUMtome/microtome.cpp new file mode 100644 index 0000000..13acfc7 --- /dev/null +++ b/BrainATUMtome/microtome.cpp @@ -0,0 +1,31 @@ +#include "microtome.h" + +Microtome::Microtome(QObject *parent) : QObject(parent) +{ + +} + + +void Microtome::on_uirequest_cuttingMotor(bool state) +{ + QString textState = (state) ? "on" : "off"; + emit log(EventLogType::Notify, "Microtome :: cutting motor is " + textState); +} + + +void Microtome::on_uirequest_cuttingSpeed(int cuttingSpeed) +{ + emit log(EventLogType::Notify, "Microtome :: cutting speed is " + QString::number(cuttingSpeed)); +} + + +void Microtome::on_uirequest_returnSpeed(int returnSpeed) +{ + emit log(EventLogType::Notify, "Microtome :: return speed is " + QString::number(returnSpeed)); +} + + +void Microtome::on_uirequest_feedStep(int feedStep) +{ + emit log(EventLogType::Notify, "Microtome :: feed step is " + QString::number(feedStep)); +} diff --git a/BrainATUMtome/microtome.h b/BrainATUMtome/microtome.h new file mode 100644 index 0000000..c4d7d2f --- /dev/null +++ b/BrainATUMtome/microtome.h @@ -0,0 +1,26 @@ +#ifndef MICROTOME_H +#define MICROTOME_H + +#include + +#include "eventlog.h" + +class Microtome : public QObject +{ + Q_OBJECT + +public: + explicit Microtome(QObject *parent = nullptr); + +public slots: + void on_uirequest_cuttingMotor(bool state); + void on_uirequest_cuttingSpeed(int cuttingSpeed); + void on_uirequest_returnSpeed(int returnSpeed); + void on_uirequest_feedStep(int feedStep); + +signals: + void log(EventLogType type, const QString &message); + +}; + +#endif // MICROTOME_H diff --git a/BrainATUMtome/syringe.cpp b/BrainATUMtome/syringe.cpp new file mode 100644 index 0000000..ec0343d --- /dev/null +++ b/BrainATUMtome/syringe.cpp @@ -0,0 +1,21 @@ +#include "syringe.h" + +Syringe::Syringe(QObject *parent) : QObject(parent), + m_auto(false) +{ + +} + + +void Syringe::on_uirequest_pump() +{ + emit log(EventLogType::Notify, "Syringe :: pump"); +} + + +void Syringe::on_uirequest_auto(bool state) +{ + QString textState = (state) ? "on" : "off"; + emit log(EventLogType::Notify, "Syringe :: auto pumping is " + textState); + m_auto = state; +} diff --git a/BrainATUMtome/syringe.h b/BrainATUMtome/syringe.h new file mode 100644 index 0000000..5707379 --- /dev/null +++ b/BrainATUMtome/syringe.h @@ -0,0 +1,26 @@ +#ifndef SYRINGE_H +#define SYRINGE_H + +#include + +#include "eventlog.h" + +class Syringe : public QObject +{ + Q_OBJECT + +public: + explicit Syringe(QObject *parent = nullptr); + +private: + bool m_auto; + +signals: + void log(EventLogType type, const QString &message); + +public slots: + void on_uirequest_pump(); + void on_uirequest_auto(bool state); +}; + +#endif // SYRINGE_H