gpt4 book ai didi

python - 通过 pyserial 接收多个值并在 Python GUI 中显示

转载 作者:行者123 更新时间:2023-12-01 06:10:41 27 4
gpt4 key购买 nike

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

我正在从Arduino发送一个“数据包”,其格式为“&4,25/n”,关键因素是“4”和“25”位置的值。在此数据包中,我将“&”作为起始字节,将新换行符“/n”作为终止符。这样我就可以知道何时发送新数据包以及何时结束。

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

这是我现在拥有的代码,我用它来接收一个没有起始字节的单个值,使用新的换行符来终止数据包。

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 值来显示两个不同的传感器。

<小时/>

更新

<下面评论者的回答。>这是有效的正确代码。

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, if you read an entire line
split_data = ping_data.split(',')
L_Ping = split_data[0]
R_Ping = split_data[1]
self.components.PingLeft.text = str(L_Ping)
self.components.PingRight.text = str(R_Ping)

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

感谢您的精彩而简单的回答!

最佳答案

尝试拆分文本:

split_data = ping_data.split(',')
对于上面的示例,

split_data 将包含 ['4', '25']
然后您可以像这样访问数据:

first_val = split_data[0]
second_val = split_data[1]

关于python - 通过 pyserial 接收多个值并在 Python GUI 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6154341/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com