我編寫了一個Arduino來串行發送數據到我的電腦。 pySerial正在從串口中正確讀取,但由於我總是希望獲得最新的信息,因此我認爲我可以使用flushInput()來刷新輸入緩衝區,但是當命令執行時,我不能再讀取串行。我只嘗試每次掃描51次(因爲51是一個素數,我可以很容易地用計數器計數51次而不必重置),這樣Arduino就有足夠的時間發送下一個數據包(運行在57600波特率),但仍然無法正常工作。也就是說,我使用了一個變量來存儲使用deadline()的讀取行的長度,但是,一旦我打到51並且輸入緩衝區被刷新,我總是得到0的讀數,這意味着它沒有讀取任何東西。我已經閱讀了pySerial的文檔,但還沒有找到任何相關信息。 flushInput()是否終止了串行連接?非常感謝。當我在Python中刷新串行緩衝區時,它停止讀取
編輯:我運行Mac OS 10.7.5和Python 2.7.3
try:
self.s = serial.Serial("/dev/tty.usbmodemfa131", 57600, timeout = 0)
self.FlightLoopCB = self.FlightLoopCallback
XPLMRegisterFlightLoopCallback(self, self.FlightLoopCB, self.interval, 0)
except serial.SerialException:
self.s = None
.
.
.
self.length=0
self.myline=self.s.readline()
self.length=len(self.myline)
print "Test: %i %i" % (self.length, self.j)
if(self.length>=7):
if(self.myline[0:2]=="R,"):
if(self.j%51==0):
self.s.flushInput()
self.length=len(self.myline)
self.myline=self.myline[2:6]
self.myLineBytes=[0,0]
self.myLineBytes[0]=unpack('>H', self.myline[0:2])
self.myLineBytes[1]=unpack('>H', self.myline[2:4])
你能發佈你的代碼嗎?或者至少是打開套接字並刷新輸入的部分? – entropy 2013-02-23 22:21:48
PS:你在哪個平臺上運行這個(windows,linux,osx,別的...)?由於pySerial代碼不同,這可能是顯着的 – entropy 2013-02-23 22:23:48
@entropy我編輯了這篇文章。 – Gepapado 2013-02-24 19:19:17