reading currents and data

This commit is contained in:
livefish
2024-12-25 19:52:32 +03:00
parent 0f1be7ddd6
commit def38b1f54
3 changed files with 117 additions and 10 deletions

View File

@ -133,7 +133,8 @@ def readControllerCurrentsAndData() -> bool:
dmx_address_field.delete(0, tk.END) dmx_address_field.delete(0, tk.END)
dmx_address_field.insert(tk.END, str(address)) dmx_address_field.insert(tk.END, str(address))
global modes global modesself.ui.DeviceSelection.addItems(['/dev/ttyUSB0', '/dev/ttyUSB2'])
modes = [] modes = []
setStatus(f'Чтение режимов {controller.controller.ser.port}...') setStatus(f'Чтение режимов {controller.controller.ser.port}...')

123
main.py
View File

@ -1,8 +1,9 @@
import time
from PyQt6 import QtCore, QtGui, QtWidgets from PyQt6 import QtCore, QtGui, QtWidgets
from ui import Ui_Controller from ui import Ui_Controller
import controller.controller_reifined as controller import controller.controller_reifined as controller
controller = controller.ControllerInterface(controller.ControllerRefined(0xFFFFFFFFFFFF, 0x112233445542))
class Window(QtWidgets.QMainWindow): class Window(QtWidgets.QMainWindow):
def __init__(self): def __init__(self):
@ -10,8 +11,29 @@ class Window(QtWidgets.QMainWindow):
self.ui = Ui_Controller() self.ui = Ui_Controller()
self.ui.setupUi(self) self.ui.setupUi(self)
self.hoverFilter = self.ComboBoxHoverEventFilter(self.ui.DeviceSelection, self.hover) # controller
self.controller = controller.ControllerInterface(controller.ControllerRefined(0xFFFFFFFFFFFF, 0x112233445542))
# dev selection
self.hoverFilter = self.ComboBoxHoverEventFilter(self.ui.DeviceSelection, self.refreshDeviceList)
self.connected = False
# qt styles
self.redLineEdit = "QLineEdit { background: rgb(255, 0, 0); selection-background-color: rgb(111, 136, 222); }"
self.defLineEdit = "QLineEdit { }"
# object containers
self.currentFields = [
self.ui.Current1Field,
self.ui.Current2Field,
self.ui.Current3Field,
self.ui.Current4Field,
]
# modes, currents, etc
self.modes = []
# connect signals
self.connectMethods() self.connectMethods()
class ComboBoxHoverEventFilter(QtCore.QObject): class ComboBoxHoverEventFilter(QtCore.QObject):
@ -21,20 +43,105 @@ class Window(QtWidgets.QMainWindow):
self.onEnter = onEnter self.onEnter = onEnter
def eventFilter(self, obj, event): def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.Type.Enter: # Наведение мыши if event.type() == QtCore.QEvent.Type.Enter:
self.onEnter() self.onEnter()
return super().eventFilter(obj, event) return super().eventFilter(obj, event)
def connectMethods(self): def connectMethods(self):
self.ui.DeviceSelection.addItems(['/dev/ttyUSB1', '/dev/ttyUSB2']) self.ui.DeviceSelection.activated.connect(self.deviceSelected)
self.ui.DeviceSelection.currentTextChanged.connect(self.deviceSelected)
self.ui.DeviceSelection.installEventFilter(self.hoverFilter) self.ui.DeviceSelection.installEventFilter(self.hoverFilter)
def deviceSelected(self, device: str): def resetAllStyles(self) -> None:
for f in self.currentFields:
f.setStyleSheet(self.defLineEdit)
def clearAllFields(self) -> None:
for f in self.currentFields:
f.setText("")
def setStatus(self, text: str) -> None :
print(text)
def deviceSelected(self, deviceIndex: int):
device = self.ui.DeviceSelection.itemText(deviceIndex)
self.connected = False
self.resetAllStyles()
self.clearAllFields()
self.setStatus(f'Подключение к {device}...')
self.controller.close()
self.controller.connect(device)
print(device) print(device)
def hover(self): if self.readControllerCurrentsAndData():
print('a') self.setStatus(f'Выбранный порт: {device}')
self.connected = True
else:
self.setStatus(f'Не удалось подключиться к {device}')
self.ui.DeviceSelection.clear()
self.connected = False
self.controller.close()
def readControllerCurrentsAndData(self) -> bool:
self.setStatus(f'Чтение токов {self.controller.controller.ser.port}...')
values = self.controller.readCurrents()
if not values:
for f in self.currentFields:
f.setStyleSheet(self.redLineEdit)
else:
for i, f in enumerate(self.currentFields):
f.setStyleSheet(self.defLineEdit)
f.setText(str(values[i] * 10))
self.setStatus(f'Чтение адреса {self.controller.controller.ser.port}...')
address = self.controller.readAddress()
if address == -1:
self.ui.DmxAddressField.setStyleSheet(self.redLineEdit)
else:
self.ui.DmxAddressField.setStyleSheet(self.defLineEdit)
self.ui.DmxAddressField.setText(str(address))
self.modes = []
self.setStatus(f'Чтение режимов {self.controller.controller.ser.port}...')
dev_info = self.controller.readDeviceInfo()
if dev_info:
mode_count = dev_info[2]
for index in range(mode_count):
self.setStatus(f'Чтение режима {index + 1} {self.controller.controller.ser.port}...')
mode = self.controller.readMode(index)
if not mode:
self.modes = []
break
self.modes.append(mode)
time.sleep(0.05)
if not self.modes:
self.ui.ModeSelection.clear()
self.ui.ModeSelection.setCurrentText('ERROR')
else:
self.ui.ModeSelection.setStyleSheet('QComboBox {}')
self.ui.ModeSelection.clear()
for m in self.modes:
self.ui.ModeSelection.addItem(m[1])
mode_names = []
for index, m in enumerate(self.modes):
mode_names.append(f'{index + 1}:{m[1]}')
self.ui.ModeSelection.setCurrentText(mode_names[dev_info[1] - 1])
self.ui.ModeSelection.clear()
self.ui.ModeSelection.addItems(mode_names)
return values or address != -1 or self.modes
def refreshDeviceList(self):
self.ui.DeviceSelection.clear()
self.ui.DeviceSelection.addItems(self.controller.readComPorts())
if __name__ == '__main__': if __name__ == '__main__':
import sys import sys

1
ui.py
View File

@ -186,7 +186,6 @@ class Ui_Controller(object):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
Controller.setWindowTitle(_translate("Controller", "Controller")) Controller.setWindowTitle(_translate("Controller", "Controller"))
self.ComPort.setText(_translate("Controller", "COM Порт:")) self.ComPort.setText(_translate("Controller", "COM Порт:"))
self.DeviceSelection.setItemText(0, _translate("Controller", "/dev/ttyUSB0"))
self.DmxAddress.setText(_translate("Controller", "DMX Адрес:")) self.DmxAddress.setText(_translate("Controller", "DMX Адрес:"))
self.DmxAddressField.setText(_translate("Controller", "10")) self.DmxAddressField.setText(_translate("Controller", "10"))
self.DmxAddressField.setPlaceholderText(_translate("Controller", "no data")) self.DmxAddressField.setPlaceholderText(_translate("Controller", "no data"))