PyQT5-如何在QLCD窗口小部件中显示串行发射信号的一部分



我已经将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%得到解决,因为我可以阅读";信号块";,但是如何根据这部分信号进行平均呢?

这与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)

最新更新