2017-05-18 5 views
0

私はecgを構築したいと思います。フィルタはudooで構築されているので、私はpythonで信号をプロットしたいと思います。しかし、それは私が私のコードを実行しながらこれを取得して保持します:Python:ValueError:文字列をリアルタイムデータでfloatに変換できませんでした

ValueError: could not convert string to float.

import serial 
import sys 
import time 
from pyqtgraph.Qt import QtGui, QtCore 
import numpy as np 
import pyqtgraph as pg 


# constants 
BAUDE_RATE = 9600 
ARDUINO_MAX_INT = 2 ** 10 
ARDUINO_MAX_VOLTAGE = 3.3 
WINDOW_SIZE = 30 
MAX_DATA_SIZE = 1024 

# declare the Window 
app = QtGui.QApplication([]) 
win = pg.GraphicsWindow(title="Arduino Analog Plotter") 
win.resize(1000, 600) 

# initialize plots 
raw_plot = win.addPlot(title="Raw Pin Data") 
raw_curve = raw_plot.plot(pen='y') 
raw_plot.addLegend() 
raw_plot.showGrid(True, True) 
raw_plot.setYRange(0, 1200) 
raw_plot.setXRange(0, 1024) 

# disable auto size of the x-y axis 
raw_plot.enableAutoRange('xy', False) 
raw_data = np.zeros(1024) 
# open serial 
ser = serial.Serial('COM10', 115200, timeout=1) 
line = pg.InfiniteLine(pos=1024, angle=0, pen=(24, 215, 248)) 
raw_plot.addItem(line) 

ser.flushInput() 
def gettemp(ser): 
    ser.write('t') 
    ser.flush() 
    return ser.readline().strip('\r').strip('\n').split(' ').pop(7) 

def update(): 
    global raw_data 
    # open serial port 
    raw_capture = [] 
    for x in range(WINDOW_SIZE): 
     sensoroutput=gettemp() 

     r=sensoroutput 
     ser.readline().strip('\r').strip('\n').split(' ').pop(7) 
     raw_capture.append(float(r).pop(7)) 

    raw_data = np.concatenate([raw_data, raw_capture]) 

    # remove first bin to make room for new bin 

    if len(raw_data) > MAX_DATA_SIZE: 
     raw_data = raw_data[WINDOW_SIZE:] 

    # plot data 
    raw_curve.setData(raw_data) 


def savecounter(): 
    ser.close() 


import atexit 

atexit.register(savecounter) 
timer = QtCore.QTimer() 
timer.timeout.connect(update) 
timer.start(0) 
## Start Qt event loop unless running in interactive mode or using pyside. 
if __name__ == '__main__': 
    import sys 

if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 
    QtGui.QApplication.instance().exec_() 

誰もがこの問題を解決する方法を知っていますか?

+0

エラーが発生していますか? –

+1

取得している正確なスタックトレース/エラーを投稿してください。このスタックトレースは、問題に遭遇したコード行を示します。 – bedwyr

答えて

0

あなたのsensoroutputは文字列のようです。 あなたはfloat()に直接変換することはできません。

raw_capture.append(float(r).pop(7)) 

あなたがセンサ出力の出力が何であるかを投稿することができますか?

0

私はちょうどここに野生の刺しを取るが、通常、あなたがラインのため\r\nの両方を持っている場合は語尾\rが最初に来ると\nが第二来ています。それらの文字を取り除く方法は、\nが削除される前にstripに最初にしようとするので、残りの文字は\rです。 float()は、文字列内の数字以外の文字に失敗します。代わりにこれを試してください。これは同時に行末の文字を削除します:

ser.readline().strip('\r\n').split(' ').pop(7) 
+0

違うエラーになっています。これは次のようになります: 更新時の48行目の "plot_serial.py"ファイル sensoroutput = gettemp TypeError:gettemp()は引数1をとります(0が指定されています)s: –

+0

@ AhmadNuriantoはあなたのプログラムに1つの問題があると指摘しているだけで、他の人がいないというわけではありません... –

関連する問題