2017-05-18 5 views
0

Ich möchte ein EKG erstellen. der Filter ist in udoo eingebaut, dann möchte ich das Signal in Python plotten. aber es hält diese während immer betreibe ich meinen Code:Python: ValueError: Konnte keine Zeichenfolge in Float in Echtzeitdaten konvertieren

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_() 

Weiß jemand, wie man das Problem lösen?

+0

Auf welcher Zeile erhalten Sie den Fehler? –

+1

Bitte posten Sie den genauen Stack-Trace/Fehler, den Sie bekommen. Dieser Stack-Trace teilt Ihnen die Codezeile mit, die auf das Problem trifft. – bedwyr

Antwort

0

Ihr Sensorausgang scheint eine Zeichenfolge zu sein. Sie können es nicht direkt konvertieren mit float():

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

Können Sie nach, was die Ausgabe von sensoroutput?

0

Ich nehme nur einen wilden Stich hier, aber in der Regel, wenn Sie sowohl \r und \n für Linie haben Endungen der \r kommt zuerst und die \n kommt an zweiter Stelle. Die Art, wie Sie diese Zeichen entfernen, bleibt \r, weil Sie versuchen, zuerst strip, bevor die \n wurde entfernt; float() schlägt bei dem nicht numerischen Zeichen in der Zeichenfolge fehl. Versuchen Sie dies stattdessen, es werden beide Zeilenendezeichen gleichzeitig entfernt:

+0

es wird ein anderer Fehler. es wird so: Traceback (letzter Aufruf zuletzt): Datei "plot_serial.py", Zeile 48, in Update sensoroutput = gettemp() TypeError: gettemp() nimmt genau 1 Argument (0 gegeben) s: –

+0

@ AhmadNurianto, nur weil ich auf ein Problem mit deinem Programm hingewiesen habe, heißt das nicht, dass es keine anderen gibt ... –

Verwandte Themen