我試圖讀取串口連接線,並將其轉換爲int:將字符串轉換到串行連接詮釋
print arduino.readline()
length = int(arduino.readline())
,但得到這個錯誤:
ValueError: invalid literal for int() with base 10: ''
我擡頭一看這個錯誤並且意味着它不可能將空字符串轉換爲int,但事實是,我的readline
不是空的,因爲它將它打印出來。
我試圖讀取串口連接線,並將其轉換爲int:將字符串轉換到串行連接詮釋
print arduino.readline()
length = int(arduino.readline())
,但得到這個錯誤:
ValueError: invalid literal for int() with base 10: ''
我擡頭一看這個錯誤並且意味着它不可能將空字符串轉換爲int,但事實是,我的readline
不是空的,因爲它將它打印出來。
print
語句將其打印出來,下一個調用讀取下一行。你應該可以這樣做。
num = arduino.readline()
length = int(num)
既然你提到Arduino正在返回C風格的字符串,你應該去掉NULL字符。
num = arduino.readline()
length = int(num.strip('\0'))
當你說
print arduino.readline()
您已經閱讀當前可用的線路。所以,下一個readline
可能沒有獲取任何數據。你可能想在一個變量存儲這個像這樣
data = arduino.readline()
print data
length = int(data)
由於數據似乎也有空字符(\0
),你可能想要去除,像這樣
data = arduino.readline().rstrip('\0')
我現在得到這個錯誤='ValueError:int()'的參數中的空字節。我是否需要在末尾添加空字節字符? – pattex007
@ pattex007打印'print'語句是什麼? – thefourtheye
@ pattex007:去掉空字符。 'data.strip( '\ 0')'。我想,Arduino會返回C風格的字符串。 –
每次調用readline()讀取一個新行,所以您的第一條語句已經讀過一行,下一次您調用readline()數據不再可用。
嘗試這種情況:
s = arduino.readline()
if len(s) != 0:
print s
length = int(s)
問題是,當Arduino的開始發送它開始通過最初發送空字符串的串行數據,所以pyserial拾取一個空字符串''
不能轉換爲整數。你可以在serial.readline()
之上添加一個延遲,如下所示:
while True:
time.sleep(1.5)
pos = arduino.readline().rstrip().decode()
print(pos)
'print arduino.readline()'的輸出是什麼? – skamsie
問題是當你在'print'中調用'readline()'時,它會消耗內容,因此連續調用將是空的。 – alvits