2016-06-10 4 views
0

Ich arbeite an einem Projekt, in dem ich Spannungen von einem teensy 2.0 sammeln muss (das ich mit Arduino programmiere) und diese Spannungen an Python sende. Ich muss auch die Mikrosekunde senden, in der die Daten aufgenommen wurden. Ich benutze PySerial, um mit dem Teenager zu kommunizieren. Ich lese zuerst alle meine Daten in ein Array der Länge 3998 ein. Ich habe zwei andere Arrays, ein timeData Array, das die Mikrosekunden verfolgt, und ein Array, das die Spannungen verfolgt. Jedes Array trägt die Hälfte der Daten oder 1999 Punkte.Python analysiert keine seriellen Daten zu einem Array

Probenteil von SerialData:

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

Dies wird 1999-mal wiederholt erhalten. Der Python-Code nimmt diese Eingaben und schreibt sie in das Array "SerialData". Nachdem es alle Daten fertig Lesen trennt sie alle Punkte in den beiden Feldern wie so:

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 

Proben- und Sample1 sind Zählvariablen.

Von float(str(SerialData[i], 'utf-8')) Ausdrucken, ich weiß, dass wie ein Schwimmer den String Parsen funktioniert, aber wenn ich radarData[samples] oder timeData[samples] ausdrucken, ich sehe nur 0. Was mache ich falsch? Jede Hilfe wird geschätzt.

Danke!

+0

Können Sie zeigen, was in 'SerialData' genau ist? Komm in den Debugger und zeig uns ein paar Dinge. – rrauenza

+0

SerialData ist das gleiche wie die Ausgabe des Teeny @ rrauenza –

+0

Ja, aber ist das '[" b'0.2 \ r \ n '", ...]' oder '[b'0.2 \ r \ n',. ..] ' – rrauenza

Antwort

0

Ich vermute, Sie haben eine falsche Prämisse, wie Listen funktionieren, die Sie vermasseln. Dies funktioniert:

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)  

(Diese btw ist das, was wir meinen, wenn wir für ein MCVE fragen)

ich Ihren Code geändert leere Listen anhängen und die Beispiel Indizes entfernt.

Es scheint, dass für Ihre Code SerialData Bedürfnisse arbeiten eine zugeordnete Liste mit len(SerialData) (oder mehr) Elemente schon sein.

Wenn Sie bei der Ausführung Ihres Skripts buchstäblich SerialData[samples] ausführen, sehen Sie sich ein vorinitialisiertes Element in Ihrer Liste an. Welchen Wert hat samples, wenn Sie schauen?

Hier ist meine Ausgabe:

[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] 

Und für Spaß:

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

Ich bekomme nicht mehr nur Nullen in radarData. Vielen Dank! –

Verwandte Themen