如何在Python中加速字符串拆分

2024-04-24 07:50:25 发布

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

我从一个带有Tkinter GUI的Arduino接收数据,需要以每秒20个样本的速度接收8个不同的值并绘制它们的图形。我在一张图上画4,在另一张图上画4。Arduino端的代码工作正常,并使用以下格式以正确的速率发送。你知道吗

Serial.println(String(val1) + "," + String(val2) + ...

在Python方面,我接收并绘制如下:

def update_graph(self, i):
    self.xdata.append(i)
    while (self.arduinoData.inWaiting()==0):
        pass
    x = self.arduinoData.readline()
    split_data = x.split(",")
    print split_data[1]
    self.ydata1.append(int(split_data[0]))
    self.ydata2.append(int(split_data[1]))
    self.ydata3.append(int(split_data[2]))
    self.ydata4.append(int(split_data[3]))
    self.ydata5.append(int(split_data[4]))
    self.ydata6.append(int(split_data[5]))
    self.ydata7.append(int(split_data[6]))
    self.ydata8.append(int(split_data[7]))
    self.line1.set_data(self.xdata, self.ydata1)
    self.line2.set_data(self.xdata, self.ydata2)
    self.line3.set_data(self.xdata, self.ydata3)
    self.line4.set_data(self.xdata, self.ydata4)
    self.ax1.set_ylim(min(self.ydata1), max(self.ydata4))
    self.ax1.set_xlim(min(self.xdata), max(self.xdata))
    self.line5.set_data(self.xdata, self.ydata5)
    self.line6.set_data(self.xdata, self.ydata6)
    self.line7.set_data(self.xdata, self.ydata7)
    self.line8.set_data(self.xdata, self.ydata8)
    self.ax2.set_ylim(min(self.ydata5), max(self.ydata8))
    self.ax2.set_xlim(min(self.xdata), max(self.xdata))
    if i >= self.points - 1:
        self.running = False
        self.ani = None
    return self.line1,
    return self.line2,
    return self.line3,
    return self.line4,
    return self.line5,
    return self.line6,
    return self.line7,
    return self.line8,

这被证明是太慢了,跟不上传入的数据。有没有更快的方法来接收和解析数据?你知道吗


Tags: selfdatareturnminmaxarduinointsplit
1条回答
网友
1楼 · 发布于 2024-04-24 07:50:25

我同意@gre\u gor的观点,解析不是最慢的部分。不久前,我正在做一个类似的项目,发现设置arduino到一个更高的串行速度做的把戏。你知道吗

void setup(){
    Serial.begin(115200);
}

相关问题 更多 >