Я пытаюсь получить последовательные данные с моего 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)
Любое решение или решение этой проблемы? Я полностью потерян.
Edit1: я запустил
>>> float(b'1.80\r\n')
1.8
в другой консоли python, и она работает совершенно нормально. В чем проблема при чтении из псевдонима?