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

时间:2016-06-10 21:10:29

标签: python-3.x arduino 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.我做错了什么?任何帮助表示赞赏。

谢谢!

1 个答案:

答案 0 :(得分: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)