Skip to content

Commit 2383e3f

Browse files
author
NataliaP721
committed
Parsed GPS data and fixed bug in code
1 parent 978da15 commit 2383e3f

File tree

1 file changed

+41
-21
lines changed

1 file changed

+41
-21
lines changed

parseData.py

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class AvionicsData:
88
def __init__(self):
99
self.imu = [0] * 9
1010
self.bar = [0] * 2
11-
self.gps = [0] * 4
11+
self.gps = [0] * 8
1212
self.oxi = -1
1313
self.cmb = -1
1414
self.phs = -1
@@ -25,15 +25,19 @@ def __str__(self):
2525
string+="IMU - GYRO:\t\t"+ str(self.imu[3:6])+" mdps"+"\n"
2626
string+="BAR - PRESS:\t\t"+ str(self.bar[0]/100) +" mbar"+"\n"
2727
string+="BAR - TEMP:\t\t"+ str(self.bar[1]/100)+" degrees C"+"\n"
28+
string+="GPS - TIME:\t\t"+ str(self.gps[0]) + "\n"
29+
string+="GPS - LAT:\t\t"+ str(self.gps[1] + self.gps[2]/100000/60) + " " + str(self.gps[3]) + "\n"
30+
string+="GPS - LONG:\t\t"+ str(self.gps[4] + self.gps[5]/100000/60) + " " + str(self.gps[6]) + "\n"
31+
string+="GPS - ALT:\t\t" + str(self.gps[7]) + " m" + "\n"
2832
string+="OXI - P:\t\t"+ str(self.oxi/1000)+" psi"+"\n"
2933
string+="CMB - P:\t\t"+ str(self.cmb/1000)+" psi"+"\n"
3034
string+="PHS - PHASE:\t\t"+ str(phases[self.phs+1])+"\n"
3135
string+="Inj Valve:\t\t" + str(valveStatus[self.injValve+1])+"\n"
3236
string+="Lower Vent:\t\t" + str(valveStatus[self.lowerVnt+1])+"\n"
3337

3438
with open('fligthData.csv', 'a') as csvfile:
35-
spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
36-
spamwriter.writerow([str(self.imu[0]), str(self.imu[1]), str(self.imu[2]), str(self.imu[3]), str(self.imu[4]), str(self.imu[5]), str(self.bar[0]), str(self.bar[1])])
39+
spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
40+
spamwriter.writerow([str(self.imu[0]), str(self.imu[1]), str(self.imu[2]), str(self.imu[3]), str(self.imu[4]), str(self.imu[5]), str(self.bar[0]), str(self.bar[1])])
3741

3842
return string
3943

@@ -77,16 +81,28 @@ def readSerial(ser,data):
7781
i+=1
7882

7983
#GPS Data
80-
elif((line[i:i+8]=='33333333') and (len(line)-i>=41)):
81-
if(line[i+40:i+42]=='00'):
82-
print(line[i:i+42])
83-
data.gps[0] = twos_complement(line[i+8:i+16], 32)
84-
data.gps[1] = twos_complement(line[i+16:i+24], 32)
85-
data.gps[2] = twos_complement(line[i+24:i+32], 32)
86-
data.gps[3] = twos_complement(line[i+32:i+40], 32)
87-
i+=41
88-
else:
89-
i+=1
84+
elif((line[i:i+8]=='33333333') and (len(line)-i>=57)):
85+
if(line[i+56:i+58]=='00'):
86+
data.gps[0] = (twos_complement(line[i+8:i+16], 32))/100
87+
data.gps[1] = (twos_complement(line[i+16:i+24], 32))
88+
data.gps[2] = (twos_complement(line[i+24:i+32], 32))
89+
if data.gps[1] < 0:
90+
data.gps[3] = "S"
91+
data.gps[1] *= -1
92+
data.gps[2] *= -1
93+
else:
94+
data.gps[3] = "N"
95+
data.gps[4] = (twos_complement(line[i+32:i+40], 32))
96+
data.gps[5] = (twos_complement(line[i+40:i+48], 32))
97+
if data.gps[4] < 0:
98+
data.gps[6] = "W"
99+
data.gps[4] *= -1
100+
data.gps[5] *= -1
101+
else:
102+
data.gps[6] = "E"
103+
data.gps[7] = (twos_complement(line[i+48:i+56], 32))/10
104+
i+=57
105+
else: i+=1
90106

91107
#Oxidizer Tank Pressure
92108
elif((line[i:i+8]=='34343434') and (len(line)-i>=17)):
@@ -103,29 +119,31 @@ def readSerial(ser,data):
103119
else: i+=1
104120

105121
#Flight Phase
106-
elif((line[i:i+8]=='36363636') and (len(line)-i>=13)):
122+
elif((line[i:i+8]=='36363636') and (len(line)-i>=11)):
107123
if(line[i+10:i+12]=='00'):
108124
data.phs = int(line[i+8:i+10], 16)
109-
i+=12
125+
i+=11
110126
else: i+=1
111127

112128
#Injection Valve Status
113-
elif((line[i:i+8]=='38383838') and (len(line)-i>=13)):
129+
elif((line[i:i+8]=='38383838') and (len(line)-i>=11)):
114130
if(line[i+10:i+12]=='00'):
115131
data.injValve = int(line[i+8:i+10], 16)
116-
i+=12
132+
i+=11
117133
else: i+=1
118134

119135
#Lower Vent Valve
120-
elif((line[i:i+8]=='39393939') and (len(line)-i>=13)):
136+
elif((line[i:i+8]=='39393939') and (len(line)-i>=11)):
121137
if(line[i+10:i+12]=='00'):
122138
data.lowerVnt = int(line[i+8:i+10], 16)
123-
i+=12
139+
i+=11
124140
else: i+=1
125141

126142
#No packet detected
127143
else: i+=1
144+
128145
print(data)
146+
ser.flushInput()
129147

130148

131149
if __name__ == "__main__":
@@ -134,7 +152,9 @@ def readSerial(ser,data):
134152
while(True):
135153
port = input('Enter a Serial Port to connect to:') #Linux: /dev/ttyUSBx, Windows: COMx
136154
ser = serial.Serial(port, 9600, timeout=0)
155+
156+
ser.flushInput()
137157

138158
while(ser!=None):
139-
time.sleep(1)
140-
readSerial(ser, data)
159+
time.sleep(0.5)
160+
readSerial(ser, data)

0 commit comments

Comments
 (0)