从 arduino 读取串行数据:代码工作..on re 运行 它出错

Reading serial data from arduino: Code works..on re run it errors

import serial 
from vpython import * 

arduinoSerialData = serial.Serial('com8', 9600)
measuringRod = cylinder( radius= .5, length=6, color=color.yellow, pos=vector(-3,0,0))
lengthLabel = label(pos=vector(0,1,0), text='Target Distance is: ', box=False, height=30)
while True:  
rate(20)
if (arduinoSerialData.inWaiting()>0): 
    Data = arduinoSerialData.readline().strip().decode("ascii") 
    print(Data) 
    distance = float(Data) 
    measuringRod.length=distance 
    myLabel= 'Target Distance is: ' + Data 
    lengthLabel.text = myLabel

重新 运行 程序的错误告诉

11.85
11.53
13.07
13.43
11.66
16.53

Traceback (most recent call last): File "c:\Users\golut\OneDrive\Documents\Arduino\count\tempCodeRunnerFile.py", line 12, in
distance = float(Data) ValueError: could not convert string to float: ''

在断开和重新连接 arduino 时它工作得很好但是当我停止程序并重新 运行 它时,它停止 运行ning

我还没有测试你的代码。但是在这里,

因为在你的印刷品上你有

>>> 1.85 11.53 13.07 13.43 11.66 16.53

您应该先将此字符串拆分为多个值,因为python无法将此类字符串(具有多个浮点数)转换为浮点数


##data.split() -> ['1.85', '11.53', '13.07', '13.43', '11.66', '16.53']


data = [float(item) for item in data.split()]
[1.85, 11.53, 13.07, 13.43, 11.66, 16.53]

现在您可以使用列表 idx 处理您需要的值

数字是单独读取的,所以不需要拆分,我尝试做的是,我在打印“数据”后包含一个 if 语句,并检查传递的数据是否为空,如果不是,我将数据转换为浮点数。这样它工作正常。我面临的问题是 arduino 有时关闭程序并重新启动发送的空值,不知道为什么,所以错误一直发生,因为没有任何东西可以转换成 float