PyQT5 - 如何在 QLCD 小部件中显示串行发射信号的一部分?
PyQT5 - How to display in QLCD widget part of emited signal from serial?
我已将Arduino 连接到RPi,Arduino 会不断地逐行发送有关实际温度的信息(此时,仅来自一个传感器,稍后我会添加更多传感器)。现在只接收一个信息没问题,但稍后我会从 Arduino 发送更多数据,如下例所示:
1213141516
其中:12 是第一个传感器的温度,13 是第二个传感器的温度,依此类推
我的线程代码:
#Worker
class SerialThreadClass(QThread):
signal = pyqtSignal(str)
def __init__(self, parent=None):
super(SerialThreadClass, self).__init__(parent)
self.serialport = serial.Serial()
self.serialport.baudrate = 9600
self.serialport.port='/dev/cu.usbmodem14101'
self.serialport.open()
def run(self):
while True:
rdln = self.serialport.readline().decode('utf-8').rstrip()
self.signal.emit(str(rdln)) # pipe
print(rdln)
我在主窗口中的代码:
#MainWindow
self.mySerial = SerialThreadClass()
self.mySerial.start()
self.mySerial.signal.connect(self.ui.average_temp.display)
我不知道如何将这个字符串拆分到多个 qlcd 小部件?!
对不起我的英语 ;)
编辑:
我找到了一个想法,也许它不是正确的方法,但它正在工作:
self.signal.emit(str(rdln[0:2]))
但是问题并没有100%解决,因为我能读懂“block of signal”,但是如何根据这部分信号做平均呢?
这与QLCD无关,与字符串处理有关。
如果你确定数据总是成对的,你可以像这样拆分字符串:
values = [rdln[i:i+2] for i in range(0, len(rdln), 2)]
但是,既然你说你需要平均值,那些字符串必须转换成数字,所以你最好这样做:
total = 0
for i in range(0, len(rdln), 2):
total += (int(rdln[i:i+2]))
average = total / len(rdln)
我已将Arduino 连接到RPi,Arduino 会不断地逐行发送有关实际温度的信息(此时,仅来自一个传感器,稍后我会添加更多传感器)。现在只接收一个信息没问题,但稍后我会从 Arduino 发送更多数据,如下例所示:
1213141516
其中:12 是第一个传感器的温度,13 是第二个传感器的温度,依此类推
我的线程代码:
#Worker
class SerialThreadClass(QThread):
signal = pyqtSignal(str)
def __init__(self, parent=None):
super(SerialThreadClass, self).__init__(parent)
self.serialport = serial.Serial()
self.serialport.baudrate = 9600
self.serialport.port='/dev/cu.usbmodem14101'
self.serialport.open()
def run(self):
while True:
rdln = self.serialport.readline().decode('utf-8').rstrip()
self.signal.emit(str(rdln)) # pipe
print(rdln)
我在主窗口中的代码:
#MainWindow
self.mySerial = SerialThreadClass()
self.mySerial.start()
self.mySerial.signal.connect(self.ui.average_temp.display)
我不知道如何将这个字符串拆分到多个 qlcd 小部件?! 对不起我的英语 ;)
编辑: 我找到了一个想法,也许它不是正确的方法,但它正在工作:
self.signal.emit(str(rdln[0:2]))
但是问题并没有100%解决,因为我能读懂“block of signal”,但是如何根据这部分信号做平均呢?
这与QLCD无关,与字符串处理有关。
如果你确定数据总是成对的,你可以像这样拆分字符串:
values = [rdln[i:i+2] for i in range(0, len(rdln), 2)]
但是,既然你说你需要平均值,那些字符串必须转换成数字,所以你最好这样做:
total = 0
for i in range(0, len(rdln), 2):
total += (int(rdln[i:i+2]))
average = total / len(rdln)