Python 不将串行数据解析为数组

Python doesn't parse Serial data to an array

我正在做一个项目,我必须从一个 teensy 2.0(我正在用 arduino 编程)收集电压并将这些电压发送到 Python。我还必须发送接收数据的微秒。我正在使用 PySerial 与青少年交流。我首先将所有数据读入一个长度为 3998 的数组。我还有另外两个数组,一个 timeData 数组,用于跟踪微秒,以及一个 radarData 数组,用于跟踪电压.每个数组携带一半数据,即1999个点。

SerialData 的示例部分:

b'1468095384\r\n'
b'0.01\r\n'

这将重复 1999 次。 Python 代码获取这些输入并将它们写入数组 "SerialData"。完成读取所有数据后,它将所有点分成两个数组,如下所示:

for i in range (0,3998):
    if(i % 2 == 0):
        radarData[samples] = float(str(SerialData[i], 'utf-8'))
        samples = samples + 1
    else:
        timeData[samples1] = float(str(SerialData[i], 'utf-8'))
        samples1 = samples1 + 1

Sample 和 Sample1 是计数器变量。

从打印出 float(str(SerialData[i], 'utf-8')),我知道将字符串解析为浮点数是可行的,但是每当我打印出 radarData[samples]timeData[samples],我只看到 0。我是什么做错了吗?感谢任何帮助。

谢谢!

我怀疑您对列表的工作原理有一个错误的前提,这让您一头雾水。这有效:

SerialData = [ b'468095384\r\n', b'0.01\r\n'] * 10                              

radarData = []                                                                  
timeData = []                                                                   

for i in range(0,len(SerialData)):                                              
    if(i % 2 == 0):                                                             
        radarData.append(float(str(SerialData[i], 'utf-8')))                    
    else:                                                                       
        timeData.append(float(str(SerialData[i], 'utf-8')))                     

print(radarData)                                                                
print(timeData)       

(顺便说一句,这就是我们要求 MCVE 时的意思)

我更改了您的代码以附加到空列表并删除了示例索引。

似乎要使您的代码正常工作SerialData需要已经是一个包含len(SerialData)(或更多)项目的分配列表。

如果您的脚本退出时确实是 运行 SerialData[samples],那么您正在查看列表中某种预初始化的项目。你看samples有什么价值?

这是我的输出:

[468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0]
[0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]

为了好玩:

serialData = [ b'468095384\r\n', b'0.01\r\n'] * 10                              
tmp = list(map(lambda d: float(d), serialData))                   
radarData = tmp[0::2]                                                           
timedata = tmp[1::2]                                                            
print(radarData)                                                                
print(timeData)