2017-05-22 62 views
-1

私はTkinter GUIを使ってArduinoからデータを受信して​​おり、毎秒20サンプルで8つの異なる値を受け取ってグラフ化する必要があります。 1つのグラフに4をプロットし、別のグラフに4をプロットしています。 Arduino側のコードは正常に動作し、以下の形式で正しいレートで送信しています。 Pythonの側ではPythonで文字列分割を高速化する方法

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

私が受信し、このようにグラフ化しています:

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, 

これは、入ってくるデータに追いつくことがあまりにも遅いことが判明しました。データの受信と解析の高速化方法はありますか?

+2

私は、データの受信と解析が最も遅い部分であるとは思っていません。 –

+1

そのデータをパックバイナリ形式で送信し、 'struct'モジュールでそのデータを展開することができます。 – Keith

+0

@gre_gorプロットコマンドを実行してもそれがかなり遅れている場合でも、 – emg184

答えて

1

私は@gre_gorに同意します。解析は最も遅い部分ではありません。私は似たようなプロジェクトをやっていましたが、arduinoをより高いシリアルスピードに設定することがそのトリックでした。

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

arduinoはすでに115200 – emg184

+0

ボーのボーレートに設定されています。これは私が持っているすべてのものです。 arduinoが送信するデータを減らすことは、常に良い考えです。 –

+0

私は4つのリニアアクチュエータとそれぞれのアクチュエータに関連するセンサの位置を読んでいますので、実行可能な解決策ではありません。 – emg184

関連する問題