Exemplo n.º 1
0
class MainWindow(QMainWindow):
    def __init__(self) -> None:
        super().__init__()
        self.ui = MainWindowUI()

        # action
        self.action_run = QAction(parent=self, text="Run")
        self.action_stop = QAction(parent=self, text="Stop")
        self.action_run.triggered.connect(self.start_plot)  # type:ignore
        self.action_stop.triggered.connect(self.stop_plot)  # type:ignore
        self.action_run.setEnabled(False)
        self.action_stop.setEnabled(False)

        # setup ui
        self.ui.setup_ui(self)
        self.ui.port_combobox.currentTextChanged.connect(
            self.change_port_combobox)

        # setup toolbar
        self.addToolBar(self.ui.toolbar)
        self.ui.toolbar.addAction(self.action_run)  # type:ignore
        self.ui.toolbar.addSeparator()
        self.ui.toolbar.addAction(self.action_stop)  # type:ignore
        self.ui.toolbar.addSeparator()
        self.ui.toolbar.addWidget(self.ui.port_combobox)

    def start_plot(self):
        self.action_run.setEnabled(False)
        self.action_stop.setEnabled(True)
        try:
            port = self.ui.port_combobox.get_current_port_info().device
            with serial.Serial(port, 9600, parity=serial.PARITY_ODD) as ser:
                ser.close()
                ser.parity = serial.PARITY_NONE
                ser.open()
                time = 0
                while self.action_stop.isEnabled():
                    time = time + 0.1
                    analog_value = ser.readline().decode().rstrip()
                    voltage = float(analog_value) * 5 / 1024
                    self.ui.graph_voltage.curve.append_data(time, voltage)
        except Exception as e:
            QMessageBox.critical(self, "ERROR", str(e))
            self.action_run.setEnabled(False)
            self.action_stop.setEnabled(False)

    def stop_plot(self):
        self.action_run.setEnabled(True)
        self.action_stop.setEnabled(False)

    def change_port_combobox(self) -> None:
        if self.ui.port_combobox.get_current_port_info() is not None:
            self.action_run.setEnabled(True)
Exemplo n.º 2
0
class MainWindow(QMainWindow):
    def __init__(self) -> None:
        super().__init__()
        self.ui = MainWindowUI()

        # action
        self.action_run = QAction(parent=self, text="Run")
        self.action_stop = QAction(parent=self, text="Stop")
        self.action_run.triggered.connect(self.start_plot)  # type:ignore
        self.action_stop.triggered.connect(self.stop_plot)  # type:ignore
        self.action_run.setEnabled(False)
        self.action_stop.setEnabled(False)

        # setup ui
        self.ui.setup_ui(self)
        self.resize(1100, 600)
        self.move(50, 50)
        self.ui.port_combobox1.currentTextChanged.connect(
            self.change_port_combobox1)
        self.ui.port_combobox2.currentTextChanged.connect(
            self.change_port_combobox2)
        self.ui.btn_clear_monitor1.clicked.connect(
            self.clear_monitor1)  # type:ignore
        self.ui.btn_clear_monitor2.clicked.connect(
            self.clear_monitor2)  # type:ignore

        # setup toolbar
        self.ui.toolbar.addAction(self.action_run)  # type:ignore
        self.ui.toolbar.addSeparator()
        self.ui.toolbar.addAction(self.action_stop)  # type:ignore
        self.ui.toolbar.addSeparator()
        self.ui.toolbar.addWidget(self.ui.baudrate_combobox)
        self.ui.toolbar.addSeparator()
        self.ui.toolbar.addWidget(self.ui.port_combobox1)
        self.ui.toolbar.addSeparator()
        self.ui.toolbar.addWidget(self.ui.port_combobox2)

    def start_plot(self):
        self.action_run.setEnabled(False)
        self.action_stop.setEnabled(True)
        try:
            port1_info = self.ui.port_combobox1.get_current_port_info()
            port1 = port1_info.device if port1_info is not None else port1_info
            port2_info = self.ui.port_combobox2.get_current_port_info()
            port2 = port2_info.device if port2_info is not None else port2_info
            baudrate = self.ui.baudrate_combobox.currentText()
            with Serial(port1, baudrate) as ser1, Serial(port2,
                                                         baudrate) as ser2:
                while self.action_stop.isEnabled():
                    if port1 is not None:
                        data = ser1.readline().decode().rstrip()
                        self.ui.monitor1.appendPlainText(data)
                    if port2 is not None:
                        data = ser2.readline().decode().rstrip()
                        self.ui.monitor2.appendPlainText(data)
                    QApplication.processEvents()

        except Exception as e:
            QMessageBox.critical(self, "ERROR", str(e))
            self.action_run.setEnabled(False)
            self.action_stop.setEnabled(False)

    def stop_plot(self):
        self.action_run.setEnabled(True)
        self.action_stop.setEnabled(False)

    def change_port_combobox1(self) -> None:
        port_info = self.ui.port_combobox1.get_current_port_info()
        if port_info is not None:
            self.action_run.setEnabled(True)
            self.ui.group_monitor1.setTitle(port_info.device)

    def change_port_combobox2(self) -> None:
        port_info = self.ui.port_combobox2.get_current_port_info()
        if port_info is not None:
            self.action_run.setEnabled(True)
            self.ui.group_monitor2.setTitle(port_info.device)

    def clear_monitor1(self) -> None:
        self.ui.monitor1.clear()

    def clear_monitor2(self) -> None:
        self.ui.monitor2.clear()