' {$STAMP BS2pe} ' {$PBASIC 2.5} ' {$PORT COM6} '*********************************** '* Near Space Easy Pin Definitions * '*********************************** LCD CON 0 CLK CON 1 CS CON 2 DIO CON 3 Commit CON 4 Servo1 CON 5 Servo2 CON 6 Servo3 CON 7 GPS CON 8 MicroTrak CON 9 D6 CON 10 D5 CON 11 D4 CON 12 D3 CON 13 D2 CON 14 D1 CON 15 '*********************************** '* Near Space Easy Variables * '*********************************** I4800 CON 16572 ' 4800 baud inverted logic T1200 CON 813 T4800 CON 188 T2400 CON 16780 SkipBanks CON 1 ' skip to this memory bank, there's code in earlier one(s) Analogs CON 5 ' number of analog sensors on mission Digitals CON 3 ' number of digital instruments needing data recorded MissionWait CON 10000 ' pause (in ms) between getting data Record VAR Word ByteVariable VAR Byte WordVariable VAR Word Index VAR Byte MemoryBank VAR Nib MaxAnalog VAR Nib MaxAltitude VAR Word GoodGPS VAR Bit ' 0 = no GPS data, 1 = getting GPS data Ascent VAR Bit ' 0 = in descent, 1 = in ascent Dropped VAR Bit ' 0 = not released, 1 = released '*********************************** '* Near Space Easy Program * '*********************************** NearSpace_Easy: PAUSE 1000 HIGH CS Wait_for_Commit: IF IN4 = 1 THEN Launch GOTO Wait_for_Commit Launch: Record = 0 GOSUB GetAltitude IF GoodGPS THEN MaxAltitude = WordVariable GOTO Mission ELSE GOSUB BadGPS ENDIF Mission: IF Record < 2048 THEN Record = Record + 1 MemoryBank = SkipBanks GOSUB Altitude GOSUB Analog GOSUB Digital PAUSE MissionWait GOTO Mission ELSE GOTO End_Mission ENDIF '*********************************** '* Near Space Easy Subroutines * '*********************************** BadGPS: RETURN Altitude: GOSUB GetAltitude IF GoodGPS THEN ByteVariable = WordVariable.BYTE0 GOSUB RecordData ByteVariable = WordVariable.BYTE1 GOSUB RecordData IF WordVariable > MaxAltitude THEN MaxAltitude = WordVariable Ascent = 1 LOW 9 ELSE Ascent = 0 HIGH 9 ENDIF ELSE ' bad GPS ByteVariable = 0 ' record zeros for altitude GOSUB RecordData ByteVariable = 0 GOSUB RecordData ENDIF RETURN GetAltitude: GoodGPS = 1 SERIN GPS,I4800,10000,GPSError,[WAIT ("GGA"),SKIP 46, DEC WordVariable] 'GT320 GPS settings GOTO GetAltitudeReturn GPSError: GoodGPS = 0 GetAltitudeReturn: RETURN Analog: FOR Index = 1 TO Analogs LOOKUP Index,[$00,$8C,$CC,$9C,$DC,$AC,$EC,$BC,$FC],ByteVariable LOW CS PAUSE 10 SHIFTOUT DIO,CLK,1,[ByteVariable] SHIFTIN DIO,CLK,2,[WordVariable\12] HIGH CS ByteVariable = WordVariable.BYTE0 GOSUB RecordData ByteVariable = WordVariable.BYTE1 GOSUB RecordData NEXT RETURN Digital: Read_IR: SERIN D2,T4800,5000,NoIR,[WAIT ("M"),ByteVariable,WordVariable.LOWBYTE,WordVariable.HIGHBYTE,ByteVariable] ByteVariable = WordVariable.BYTE0 GOSUB RecordData ByteVariable = WordVariable.BYTE1 GOSUB RecordData GOTO Sun_Sensor NoIR: ByteVariable = 0 GOSUB RecordData ByteVariable = 0 GOSUB RecordData Sun_Sensor: SERIN D1,T1200,5000,NoSun,[WAIT ("H"),ByteVariable] GOSUB RecordData GOTO End_Digital NoSun: ByteVariable = 9 GOSUB RecordData End_Digital: RETURN RecordData: MemoryBank = MemoryBank + 1 STORE MemoryBank WRITE Record,ByteVariable RETURN End_Mission: END