如何select从串口接收到一个数字
How to select a number received from the serial port
我通过串行端口从运动传感器设备接收数据。
数据按行格式化并以字母开头,如下所示:
所有数字以逗号分隔,每行末尾有'\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'\r'
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)
我通过串行端口从运动传感器设备接收数据。 数据按行格式化并以字母开头,如下所示:
所有数字以逗号分隔,每行末尾有'\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'\r'
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)