[英]PySerial delay in reading line from Arduino
我將arduino uno與基本的“ DigitalReadSerial”設置結合使用,如下所示: http ://arduino.cc/en/Tutorial/DigitalReadSerial
如果我使用arduino IDE隨附的串行監視器,則它會立即顯示從按按鈕開始的任何更改。
這是我想要的pyserial,根據按鈕是否按下而為0或1。 (最終觸發計時器)
只是為了測試它,我把它放在一起,不是最漂亮的,但是似乎讀出了按鈕狀態,但是有20秒的延遲。
import serial
ser = serial.Serial()
ser.setPort("COM2")
ser.baudrate = 9600
ser.open()
while 1==1:
ser.readline()
有人有什么想法嗎?
這似乎是一個緩存/同步問題,類似於那些影響普通文件系統中文件同步的問題。 我的arduino / pyserial遇到了這個問題...直到現在?
從http://pyserial.sourceforge.net/pyserial_api.html中 ,如果我在程序中放入了3個刷新命令:ser.flush(),ser.flushInput()和ser.flushOutput(),它似乎可以正常工作。
我只是遇到了同樣的問題,而且我確信PySerial不會延遲。
延遲是由於我的PyQT線程的延遲引起的。我通過arduino的串行端口以1行/0.1秒的速度進行打印,但是我以0.5秒的延遲讀取QThread的串行輸出,這就是問題。隨着時間的流逝,延遲將增加。
我通過從項目中提取串行讀取代碼來驗證這一點。請記住, 讀取頻率不應小於寫入頻率 。
從您的代碼中,我假設您的python環境不夠快,無法及時從arduino接收數據 。
嘗試通過在兩次打印之間插入一個小的延遲來降低串行打印速度。
僅在有需要讀取的內容時才開始讀取行,否則它將在等待eol時阻塞,或者可能在讀取串行緩沖區的一半時超時,從而截斷了字符串。 這樣可以加快循環速度,並允許您使用較短的超時時間,非常適合在多個端口之間循環。 使用pyserial3.0 ...
while 1:
if ser.in_waiting > 0:
data = ser.readline()
print(data)
也嘗試類似的東西
while 1:
if ser.in_waiting > 0:
data = ser.read(32)
print(data)
如果緩沖區包含的字節數少於指定的字節數,這將不在乎,我有時會這樣做,因為它將讀取/刷新緩沖區中累積的額外數據。
您在Arduino代碼中使用的是Serial.print
還是Serial.println
? 如果是前者,則不會發出回車,並且代碼中的ser.readline()
將等待一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.