2016-06-10 21 views
0

我正在開發一個項目,我必須從teensy 2.0(我使用arduino編程)收集電壓並將這些電壓發送給Python。我還必須發送微秒數據。我使用PySerial與teensy進行通信。我首先將所有數據讀入長度爲3998的數組。我有兩個其他數組,一個是timeData數組,它跟蹤微秒,另一個是radarData數組,它跟蹤電壓。每個陣列都有一半的數據,或1999點。 SerialData的Python不會將串行數據解析爲數組

樣品部分:

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.我做錯了什麼?任何幫助表示讚賞。

謝謝!

+0

你能告訴什麼恰恰是在'SerialData'?進入調試器並向我們展示一些項目。 – rrauenza

+0

SerialData與teensy @rrauenza –

+0

的輸出是一樣的,但它是'['b'0.2 \ r \ n'「,...]或'[b'0.2 \ r \ n',。 ..]' – rrauenza

回答

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)  
+0

我不再只能在雷達數據中得到零值。謝謝! –