0

私は、10代の2.0(arduinoでプログラミングしている)から電圧を収集し、それらの電圧をPythonに送信する必要があるプロジェクトに取り組んでいます。また、データが取得されたマイクロ秒も送信する必要があります。私はPySerialを使って十代と通信しています。まず、すべてのデータを長さ 3998 の配列に読み込みます。他に 2 つの配列があります。1 つtimeDataはマイクロ秒を追跡する配列、もう 1 つradarDataは電圧を追跡する配列です。各配列はデータの半分、つまり 1999 ポイントを運びます。

SerialData のサンプル部分:

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

これは 1999 回繰り返されます。Python コードはこれらの入力を受け取り、配列「SerialData」に書き込みます。すべてのデータの読み取りが完了すると、次のようにすべてのポイントが 2 つの配列に分割されます。

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 しか表示されません。何が間違っていますか? どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

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)      
于 2016-06-10T21:33:31.390 に答える