我在Arduino Uno上使用PySerial模塊。我已經在stackoverflow用戶的幫助下,能夠生成一個針對ECG值(伏特)的時間圖。但是,有一個問題。忽略使用PySerial和Arduino進行ECG的串行端口的某些數據
當我通過將Arduino連接到我的電腦(通過USB)啓動串行端口時,數據自動開始流動。現在,當我運行我的Python文件時,它讀取來自串行端口的當前值,然後再次重新啓動爲零(我希望這樣做)。我想忽略,沖洗或任何可能適當的初始值。你可以找到Arduino的草圖,Python代碼和視頻剪輯下面是什麼發生的事情:
Arduino的素描:
#include <eHealth.h>
unsigned long time;
// The setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
}
// The loop routine runs over and over again forever:
void loop() {
float ECG = eHealth.getECG();
time = millis();
Serial.print(time);
Serial.print(" ");
Serial.print(ECG, 3);
Serial.println("");
delay(25); // wait for 50 millisecond
}
的Python:
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
import matplotlib.figure as mfig
import PyQt4.QtGui as gui, PyQt4.QtCore as core
import collections
import time
import random
import serial
ser = serial.Serial('/dev/tty.usbmodem1411', 9600)
refreshMillis = 25
N = 200
xs = collections.deque(maxlen=N)
ys = collections.deque(maxlen=N)
app = gui.QApplication([])
fig = mfig.Figure()
canvas = FigureCanvasQTAgg(fig)
ax = fig.add_subplot(111)
ax.set_ylim([0,5])
line2D, = ax.plot(xs,ys)
canvas.show()
def process_line():
line = ser.readline()
data = map(float,line.split(" "))
xs.append(data[0])
ys.append(data[1])
line2D.set_data(xs,ys)
print data
xmin, xmax = min(xs),max(xs)
if xmin == xmax:
ax.set_xlim([xmin,xmin+1])
else:
ax.set_xlim([xmin,xmax])
canvas.draw()
timer = core.QTimer()
timer.timeout.connect(process_line)
timer.start(refreshMillis)
app.exec_()
ser.flush()
ser.close()
短片:
http://www.youtube.com/watch?v=dNpUakcRPec
正如你可以當我運行上面顯示的python文件,在左列中的時間的前幾個值和在右列中的電壓值是來自端口的當前值,然後它們被重置,並且這可以在導致該最初混亂的圖上看到,這是我想要避免的。
轉儲所有輸入,逐字節,直到你得到一個換行符? –
原諒我的無知,但我該怎麼做,我已經嘗試flushInput(),但似乎沒有工作,或至少不是我的意圖。 – user3284376