如何从 pyserial 解析字符串流并与预先指定的值进行比较

How to parse a string stream from pyserial and compare with a pre-specified value

我发现这个问题真的很难表述,主要是因为我发现这个问题让我自己很困惑。

所以我有一个来自我的 Arduino 的 IMU 流 运行,我正在通过 pySerial 流式传输它。基本上它给了我这样的输出:

** #1、#2、#3、#4、#5、#6、#7、#8、#9、#10、#11**

这是一个连续的流,直到我选择停止它。我想要做的是能够单独选择值并将其与我已经确定的设定值进行比较

例如: 将值 #2 与预定义的整数 b 进行比较。我一直无法弄清楚代码。帮助将不胜感激。到目前为止,我有这个简单的代码。它必须是实时的。

import serial

ser = serial.Serial('COM11', baudrate = 115200, timeout = 1)

def getValues():

    arduinoData = ser.readline().decode('ascii')
    return arduinoData


while(1):
        print(getValues())

这是我从 getValues() 获得的输出。它一直持续到我停止它为止。

如果getValues returns 是一个字符串,可以将每个值存储在一个列表中,以便以后分析,例如:

getValues = lambda: '0, 1, 2, 3, 4' 

values = []
i = 2
while i:
    str_values = getValues()
    values += map(int, str_values.split(','))
    i -= 1

print(values)
>>> [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]

现在您可以对每个值进行比较:

b = 2
if values[2] == b:
    print('values[2] equals to b')

>>> values[2] equals to b

我能够弄清楚如何解决这个问题,我只是将列表中的每个值保存到一个变量中。因为我不打算存储这些数据,所以我只是覆盖了我声明的变量,并将它们与循环中的预定义值进行比较。

感谢您为我提供的帮助。

这是我的代码

import serial

while True:
    while(arduinoData.inWaiting()==0):
        pass # do nothing

    arduinoString = arduinoData.readline().decode('ascii')
    dataArray = arduinoString.split(',')
    length = len(dataArray)
    if length == 13:
        TP = float(dataArray[1])
        TR = float(dataArray[2])
        IP = float(dataArray[3])
        IR =  float(dataArray[4])
    else:
        time.sleep(n)