@@ -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
131149if __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