我正在尝试将串行数据从Arduino获取到python控制台
这是我的Arduino代码:
void setup() {
Serial.begin(115200);
Serial.setTimeout(10);
randomSeed(analogRead(0));
}
void loop() {
float x = float(random(0,200))/100;
Serial.println(x);
}
我需要将随机变量输入到我的python程序中。为此,我使用Pyserial
这是我的Python程序
import serial
ser = serial.Serial('/dev/ttyACM0',baudrate=115200,timeout=0.1)
ser.flushInput()
while 1:
sens = ser.read(ser.inWaiting())
sens = sens[0:len(sens)-2].decode("utf-8")
print(float(sens))
然后我看到一个错误
ValueError: could not convert string to float:
我试过用多种方法解决这个问题,但没有解决办法。
问题在于转换float(sens)
。
我需要这些数据作为其他操作的浮动
只是为了检查一下,我在代码中做了一些更改
sens = ser.read(ser.inWaiting())
print(sens,end="\t")
print(type(sens))
sens = sens[0:len(sens)-2]
print(sens,end="\t")
print(type(sens))
sens = sens.decode("utf-8")
print(sens,end="\t")
print(type(sens))
我得到的结果是
b'1.89\r\n' <class 'bytes'>
b'1.89' <class 'bytes'>
1.89 <class 'str'>
正如您所看到的,最后一个变量是一个字符串,它是我运行sens = sens.decode("utf-8")
时得到的。然而,当我运行float(sens)
时,仍然无法从这个字符串中获取浮点数据
有什么解决办法吗?我完全迷路了
编辑1: 我跑
>>> float(b'1.80\r\n')
1.8
在另一个python控制台中,它可以完全正常工作。当它是pyserial读取时有什么问题
尝试此操作,如果仍然存在问题,请在尝试强制转换之前打印值
考虑使用.SUTE()来清除输入值
结论
经过长时间的研究,我发现最初在几次迭代中,Arduino发送的是空数据。或者更确切地说,它是连续发送
b''
。这就是问题所在我现在可以肯定,因为我在python控制台中检查了这一点
所以为了克服这个问题,我所要做的就是在每次迭代中进行简单的比较。 比如
相关问题 更多 >
编程相关推荐