2014-03-30 45 views
2

我試圖讀取串口連接線,並將其轉換爲int:將字符串轉換到串行連接詮釋

print arduino.readline() 
length = int(arduino.readline()) 

,但得到這個錯誤:

ValueError: invalid literal for int() with base 10: ''

我擡頭一看這個錯誤並且意味着它不可能將空字符串轉換爲int,但事實是,我的readline不是空的,因爲它將它打印出來。

+0

'print arduino.readline()'的輸出是什麼? – skamsie

+0

問題是當你在'print'中調用'readline()'時,它會消耗內容,因此連續調用將是空的。 – alvits

回答

3

print語句將其打印出來,下一個調用讀取下一行。你應該可以這樣做。

num = arduino.readline() 
length = int(num) 

既然你提到Arduino正在返回C風格的字符串,你應該去掉NULL字符。

num = arduino.readline() 
length = int(num.strip('\0'))  
1

當你說

print arduino.readline() 

您已經閱讀當前可用的線路。所以,下一個readline可能沒有獲取任何數據。你可能想在一個變量存儲這個像這樣

data = arduino.readline() 
print data 
length = int(data) 

由於數據似乎也有空字符(\0),你可能想要去除,像這樣

data = arduino.readline().rstrip('\0') 
+0

我現在得到這個錯誤='ValueError:int()'的參數中的空字節。我是否需要在末尾添加空字節字符? – pattex007

+0

@ pattex007打印'print'語句是什麼? – thefourtheye

+1

@ pattex007:去掉空字符。 'data.strip( '\ 0')'。我想,Arduino會返回C風格的字符串。 –

1

每次調用readline()讀取一個新行,所以您的第一條語句已經讀過一行,下一次您調用readline()數據不再可用。

嘗試這種情況:

s = arduino.readline() 
if len(s) != 0: 
    print s 
    length = int(s) 
0

問題是,當Arduino的開始發送它開始通過最初發送空字符串的串行數據,所以pyserial拾取一個空字符串''不能轉換爲整數。你可以在serial.readline()之上添加一個延遲,如下所示:

while True: 
    time.sleep(1.5) 
    pos = arduino.readline().rstrip().decode() 
    print(pos)