我有一个函数可以读取存储在 Arduino 上的输出。输出如下所示:
['stopped','15.00','25.44','40.5','nan','off','off','on','50.00','yes','on','45']
['version1.0']
['3.0','0.1']
第一行包括不同地方的温度,我需要第四行。第二行没有意义,但我需要它的命令来保持设备运行。第三行是位置和力。 我需要不断向设备发送命令以保持加热器打开,否则如果在 10 秒内没有命令,设备将自动关闭。因此,我添加了一个命令
ser.write(b"y\n")
功能:
def read_output(ser, verbose=True):
position = []
force = []
temp = []
while ser.inWaiting() > 0:
line = ser.readline().strip()
line = ''.join(line.decode()[1:-1])
line = line.split(' ')
ser.write(b"y\n") #meaningless command print "version1.0"
print(line)
if verbose:
print(line)
if len(line) == 2:
position += [float(line[0])]
force += [float(line[1])]
if len(line) == 12:
temp += [float(line[3])]
if int(float(line[3])) > 50
break
time.sleep(0.001) # no busy-wait, reduce CPU
return position, force, temp
我会按 p, f, temp = read_output(ser)
收集数据,最后保存在 csv 中。
代码有时会被错位的输出中断,并出现这样的错误
['version1.0<3.0','0.1']
ValueError: could not convert string to float: 'version1.0<3.0'
看起来第二行和第三行重叠了。我想这可能是因为 ['version1.0']
和 position&force 输出 ['3.0','1.0']
是同时打印出来的。
如果发生这种情况,我将无法获得输出。谁能帮我跳过这个错误并继续运行代码?