通过pyserial接收多个值并在Python Gui中显示

2024-10-03 11:12:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Python中的串行通信接收数据,我可以做到,但我需要改进我的代码。在

我从Arduino发送了一个“数据包”,格式为“&4,25/n”,关键因素是“4”和“25”位置的值。在这个包中,我将“&;”作为startbyte,而新行馈送“/n”作为终止符。这样我就可以知道什么时候发送了一个新的包,并且它结束了。在

如何接收此数据包“&;4,24/n”并提取位于“4,24”位置的值?值得注意的是,这些值会发生变化,它们会随Arduino发送的传感器值而变化。在

这是我现在的代码,我用来接收一个没有startbyte的值,使用新行feed终止包。在

import serial
ser = serial.Serial('/dev/ttyUSB0', 9600)
from PythonCard import model
class MainWindow(model.Background):
    def on_SetSpdBtn_mouseClick(self, event):
        spd = self.components.SpdSpn.value
    def on_FwdBtn_mouseClick(self, event):
        spd = self.components.SpdSpn.value
        ser.write('@')
        ser.write('F')
        ser.write(chr(spd))
    def on_LftBtn_mouseClick(self, event):
        spd = self.components.SpdSpn.value
        ser.write('@')
        ser.write('L')
        ser.write(chr(spd))
    def on_RitBtn_mouseClick(self, event):
        spd = self.components.SpdSpn.value
        ser.write('@')
        ser.write('R')
        ser.write(chr(spd))
    def on_RvsBtn_mouseClick(self, event):
        spd = self.components.SpdSpn.value
        ser.write('@')
        ser.write('B')
        ser.write(chr(spd))
    def on_StpBtn_mouseClick(self, event):
        spd = self.components.SpdSpn.value
        ser.write('@')
        ser.write('S')
        ser.write(chr(spd))
    def on_GetPing_mouseClick(self, event):
        ser.write('~')
        ser.write('P1')
        ser.write('p2')
        retval = ser.readline() 
        ping_data = retval.strip() # strip out the newline
        self.components.PngDis.text = str(ping_data)

app = model.Application(MainWindow)
app.MainLoop()

这和一个资源文件一起,给了我一个GUI,可以通过VNC远程控制我的机器人。该代码从声纳接收一个ping值,并将其报告给GUI以显示。我需要两个不同的ping值来显示两个不同的传感器。在


更新

<;由下面的评论者回答。>; 下面是正确的代码。在

^{pr2}$

谢谢你的回答很简单!在


Tags: 代码selfeventmodelvalueondefcomponents