如何选择从串口接收的号码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何选择从串口接收的号码相关的知识,希望对你有一定的参考价值。

我通过串行端口从运动传感器设备接收数据。数据按行格式化并以字母开头,如下所示:

enter image description here

所有数字都用逗号分隔,每行末尾都有' r'字符。

我感兴趣的是从以'S'字符开头的行中获取数字,其中逗号之间始终有11个数字。例如,我想在变量(数组或列表)中保存第二个“S”行数。

我一直在尝试这个简单的Python脚本:

import serial
ser = serial.Serial('/dev/tty.usbserial-00002014', 115200)
try:
    ser.isOpen()
    #ser.flushInput()
    print('serial is open')
except:
    print('error')
    exit()

if (ser.isOpen()):
    try:
        while(1):
            print(ser.read())
    except Exception:
        print('error')
else:
    print('Cannot open serial port')

结果是连续打印端口接收的字符

b'S'
b','
b'0'
b','
b'0'
b','
b'0'
b','
b'-'
b'2'
b'8'
b','
b'2'
b'1'
b','
b'9'
b'8'
b'5'
b','
b'-'
b'1'
b'5'
b'3'
b','
b'3'
b'0'
b'5'
b','
b'-'
b'1'
b'0'
b'7'
b','
b'1'
b'2'
b'1'
b','
b'9'
b'0'
b'
'
b'Q'

似乎很难得到我需要的数字。

有没有办法获得第二个“S”线?

问候

答案

你有没有试过阅读文档?您可以使用readline读取完整的行,然后将其拆分为单词。像这样的东西:

numbers = []
with serial.Serial('/dev/tty.usbserial-00002014', 19200, timeout=10) as ser:
    line = ser.readline()
    if line.startswith('S,'):
        number = int(line.split(',')[1])
        numbers.append(number)

以上是关于如何选择从串口接收的号码的主要内容,如果未能解决你的问题,请参考以下文章

Python代码从串口连续接收可变数据

如何使用从串口接收的数据在 Qt 中绘制图形?

TQ2440开发板学习纪实--- 基于中断的UART串口接收

从相机设备获取号码

从活动接收意图后如何创建片段?

如何使用导航架构组件从片段中获取结果?