2017-05-19 176 views
-2

你好我的代碼有問題。我想從我的udoo爲我的ecg繪製一個實時信號。 buat當我將它連接得到了下面的序列:Python:AttributeError:'Serial'對象沒有用於實時數據的屬性'is_open'

Traceback (most recent call last): 
    File "plot_serial.py", line 10, in <module> 
    if userial.is_open: 
AttributeError: 'Serial' object has no attribute 'is_open' 

這裏是我的代碼:

import serial 
import time 
import matplotlib.pyplot as plt 
import numpy as np 

ubaudrate = 9600 
uport = '/dev/ttyMCC' # set the correct port before run it 
userial = serial.Serial(uport, ubaudrate, timeout=1) 
userial.timeout = 10 
if userial.is_open: 
    while True: 
     size = userial.inWaiting() 
     if size: 
      data = userial.read(size) 
      plt.figure 
      plt.plot(size, data, 'b', alpha=0.75) 
      plt.legend(('Sinyal Jantung'), loc='best') 
      plt.grid(True) 
      plt.show() 

      #print data 
     else: 
      print ('no data') 
     time.sleep(1) 
else: 
    print ('serial not open') 
# z1serial.close() # close z1serial if z1serial is open. 

感謝您的幫助之前,因爲我是新手在Python編程

回答

0

看來你正在使用舊版本的pySerial。您可以獲取更高版本的pySerial,或者使用isOpen()來替換is_open。

來自serial.read的數據可能是str,所以你需要將它轉換爲數字。

data = np.float64(np.frombuffer(data.encode(), 'B')) 

這假設數據的每個字節代表一個點。

我也看到在您的代碼繪圖的另一個問題。您可以丟棄第一輸入「大小」,像花花公子之前

plt.plot(data, 'b', alpha=0.75) 
+0

謝謝,但我得到這樣 '文件「/usr/lib/pymodules/python2.7/matplotlib/lines.py」另一個錯誤,第743行,在get_path中 self.recache() 文件「/usr/lib/pymodules/python2.7/matplotlib/lines.py」,第429行,在recache中 y = np.asarray(yconv,np.float_) 文件「/usr/lib/python2.7/dist-packages/numpy/core/numeric.py」,行460,asarray 返回數組(a,dtype,copy = False,order = order) ValueError:無效字面值爲float():336'你知道如何解決它嗎? –

+0

查看我的更新回答。 –