2016-04-16 96 views
0

我得到了以下問題:pySerial的神祕行爲

我在這裏有一個Arduino連接到我的Mac。 Arduino正在讀取並響應串行數據。 我做了一個小python3腳本,它接受用戶輸入並使用 pySerial將命令'set(13,255)〜'寫入Arduino。 這僅僅是工作的罰款:

while 1: 

cmd = input("<<< ") 
cmd += '~' 

if cmd != "~": 
    serialPort.write(cmd.encode()) 

    output = str(serialPort.readline()).upper()[2:-5] 

    if output != " ": 
     print(">>> ", output) 

這裏的問題:

如果我想送一些「自動化」的劇本中,例如命令在一個循環中,Arduino不再響應,即使發送的命令是 也一樣,也是編碼的,類型爲「字節」。

for i in range[0, 256]: 

    cmd = 'set(13, ' 
    cmd += str(i) 
    cmd += ')~' 

    serialPort.write(cmd.encode()) 

    time.sleep(0.1) 

奇怪的是,如果我首先聲明變量(CMD)作爲輸入,其也工作正常,但是這意味着手動中斷每命令是發送時間。

cmd = input() 

cmd = 'set(13, ' 
cmd += str(i) 
cmd += ')~' 

經過幾個小時的研究,我完全不知道問題可能是什麼。正如我所說的,數據類型在編碼之後總是字節。

+0

嘗試添加一個serialPort.flush後寫調用 – MrSykkox

+0

不幸的是,這是行不通的。 – rckey

回答

0

我不知道PySerial,但我懷疑這是因爲寫入調用不會立即發送數據。

當您使用輸入時,它會將一個換行符添加到緩衝區,這可能會觸發寫入調用自動刷新。

在另一段代碼中,您不會在緩衝區足夠大之前向緩衝區添加換行符,也不會刷新數據。 所以使用flush()調用它應該強制發送它。

希望它有道理

0

嗯,我只是在連接到端口後做了一個更長的中斷。 (因爲我不得不給一些輸入,迄今爲止還沒有問題)