我正在尝试从串行连接中读取一行并将其转换为int:
print arduino.readline()
length = int(arduino.readline())
但收到此错误:
ValueError:基数为10的int()的文字无效:''
我查找了这个错误,意味着无法将空字符串转换为int,但问题是,我的readline
不是空的,因为它将其打印出来。
答案 0 :(得分:3)
print
语句将其打印出来,下一个调用将读取下一行。你应该这样做。
num = arduino.readline()
length = int(num)
由于您提到Arduino正在返回C样式字符串,因此您应该删除NULL字符。
num = arduino.readline()
length = int(num.strip('\0'))
答案 1 :(得分:1)
当你说
时print arduino.readline()
您已阅读当前可用的热线。因此,下一个readline
可能无法获取任何数据。您可能希望将其存储在像此
data = arduino.readline()
print data
length = int(data)
由于数据中似乎包含空字符(\0
),您可能想要将其删除(
data = arduino.readline().rstrip('\0')
答案 2 :(得分:1)
每次调用readline()都会读取一个新行,因此您的第一个语句已经读取了一行,下次调用readline()时数据不再可用。
试试这个:
s = arduino.readline()
if len(s) != 0:
print s
length = int(s)
答案 3 :(得分:0)
问题是当arduino开始发送串行数据时,它最初通过发送空字符串来启动,因此pyserial会获取一个空字符串''
,它不能转换为整数。您可以在serial.readline()
之上添加延迟,如下所示:
while True:
time.sleep(1.5)
pos = arduino.readline().rstrip().decode()
print(pos)