Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 串行数据过滤_Python_Arduino_Serial Port_Type Conversion_Temperature - Fatal编程技术网

Python 串行数据过滤

Python 串行数据过滤,python,arduino,serial-port,type-conversion,temperature,Python,Arduino,Serial Port,Type Conversion,Temperature,我在Arduino Leonardo上使用LM-35温度传感器。 然后我使用Python与这个Arduino连接,并通过串口下载温度值 代码正在运行,Arduino正在发送数据,但我需要做的是将数值与其他字符分开。 当我运行代码时,我会在监视器上获得类似的结果: b'26.88\r\n' <class 'bytes'> 您需要去掉\r和\n字符。试试这个: import serial, time ser = serial.Serial('COM4', 9600) while 1

我在Arduino Leonardo上使用LM-35温度传感器。 然后我使用Python与这个Arduino连接,并通过串口下载温度值

代码正在运行,Arduino正在发送数据,但我需要做的是将数值与其他字符分开。 当我运行代码时,我会在监视器上获得类似的结果:

b'26.88\r\n'
<class 'bytes'>

您需要去掉\r和\n字符。试试这个:

import serial, time

ser = serial.Serial('COM4', 9600)

while 1:
    str1 = ser.readline()

    finalValue = str1.decode('utf-8').replace('\r','').replace('\n','')
    print (float(finalValue))

而不是使用两个调用来替换,一个更通用的解决方案是一个调用条带,它从字符串的开头和结尾去除所有空白。Trand但条不会在中间删除这些字符。@ HikJasWork如果您从ARDUNO温度传感器得到这样的字符串,则表示某种硬件问题。获取错误消息比假装您可以实际解析它要好。授权的readline将一直读取到\n个字符并停止,但是\r个字符呢?我在官方Pyserial文档中找不到关于\r\n的任何内容。至于硬件问题,我同意。有时,连接本身也是如此。另外,根据您的思路,理想情况下,他应该是一个在使用readline时使用超时的人。否则,它可能会永远被困在等待换行符的过程中。我试着按照建议去做,但结果是一样的,现在值被重复了。arduino上的温度传感器没有问题,因为当我使用任何串行监控程序时,它会返回正确的值。问题是解析数据,因为它是一个字节类并过滤正确的值。你有没有试过只做“floatstr1”?我这样做没问题。
import serial, time

ser = serial.Serial('COM4', 9600)

while 1:
    str1 = ser.readline()

    finalValue = str1.decode('utf-8').replace('\r','').replace('\n','')
    print (float(finalValue))