我试图读取串口连接线,并将其转换为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