2017-05-18 1 views
0

나는 ecg를 만들고 싶습니다. 필터는 udoo에 내장되어 있습니다. 그런 다음 파이썬에서 신호를 플롯하려고합니다. 그것은이 동안을 받고 계속하지만 난 내 코드를 실행 :Python : ValueError : 실시간 데이터에서 문자열을 부동으로 변환 할 수 없습니다.

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

센서 출력이 문자열로 보입니다. 당신은 float()로 직접 변환 할 수 없습니다 :

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

당신은 sensoroutput의 출력이 무엇을 게시 할 수 있습니까?

0

난 그냥 여기 야생 자상을 가지고 있지만, 일반적으로는 라인 \r\n 모두있는 경우 엔딩 \r 먼저 와서 \n 두 번째 제공하고 있습니다. 해당 문자를 제거하는 방법은 이 제거되기 전에 strip을 먼저 시도하기 때문에 남아 있습니다. \r; float()은 문자열의 숫자가 아닌 문자에 대해 실패합니다. 이 방법을 사용하면 두 줄의 문자가 동시에 제거됩니다.

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

다른 오류가 발생합니다. 트레이스 백 (가장 최근의 마지막 콜) : 업데이트에서 파일 "plot_serial.py", 48 행 센서 출력 = gettemp TypeError : gettemp()는 정확히 1 개의 인수 (주어진 0)를 사용합니다. –

+0

@ AhmadNurianto는 내가 당신의 프로그램에 하나의 문제를 지적했기 때문에 다른 사람들이 없다는 것을 의미하지는 않습니다 ... –

관련 문제