Data Recording Source Code: ' {$STAMP BS2p} ' {$PBASIC 2.5} 'Pins/Constants GPSio PIN 01 GPSraw PIN 03 accelSwitch PIN 09 MEMORYSIZE CON 2020 'must be made divisible by 20 (20B per block + 6b Header/Footer) 'Variables slotNum VAR Nib address VAR Word dayMonth VAR Word year VAR Byte hrs VAR Byte mins VAR Byte secs VAR Byte latLeft VAR Word latRight VAR Word longLeft VAR Word longRight VAR Word speed1 VAR Word speed2 VAR Nib course1 VAR Word course2 VAR Nib numSats VAR Nib alt1 VAR Word 'Initialize INPUT accelSwitch INPUT GPSraw LOW GPSraw slotNum = 0 address = 0 dayMonth = 0 year = 0 hrs = 0 mins = 0 secs = 0 latLeft = 0 latRight = 0 longLeft = 0 longRight = 0 speed1 = 0 speed2 = 0 course1 = 0 course2 = 0 numSats = 0 alt1 = 0 main: GOTO slotNumControl 'never returns to main unless a loss of power 'end main slotNumControl: slotNum = slotNum + 1 'enables 14k (2047 bytes X 7) for storage in multiple slots SELECT slotNum 'each slot holds approx. 1.5 minutes of data at 9600 baud. Slots 2-7 available CASE < 1 'slot1 holds source code END CASE > 6 'slot7 not used END CASE = 1 STORE slotNum address = 0 GOTO waitForAccel 'start of flight1 CASE = 2 STORE slotNum address = 0 GOTO collectData CASE = 3 STORE slotNum address = 0 GOTO collectData 'end dataSlot for flight1 CASE = 4 STORE slotNum address = 0 GOTO waitForAccel 'start of flight2 CASE = 5 STORE slotNum address = 0 GOTO collectData CASE = 6 STORE slotNum address = 0 GOTO collectData 'end dataSlot for flight2 ENDSELECT 'end slotNumControl waitForAccel: 'waits for accelerometer switch to trip SELECT accelSwitch CASE = 1 GOTO collectData CASE ELSE GOTO waitForAccel ENDSELECT 'end waitForAccel collectData: 'Parse GPRMC sentence by counting commas '$GPRMC,hrsminssecs.sss,validitybit,latLeft.latRight,N,longLeft.LongRight,W, speed1.speed2, 'course1.course2,dayMonthyear,...,CRC SERIN GPSio, 500,[WAIT("RMC,"), WAIT(",") , WAIT(","), WAIT(","), WAIT(","), WAIT(","), WAIT(","), WAIT(","), WAIT(","), DEC4 dayMonth, DEC2 year] WRITE address, dayMonth.HIGHBYTE address = address + 1 WRITE address, dayMonth.LOWBYTE address = address + 1 WRITE address, year address = address + 1 'end 3 byte header for slotX datablock DO WHILE address < MEMORYSIZE 'writes to current slot until 2026 bytes are used 'Parse GPRMC sentence by counting bytes & commas '$GPRMC,hrsminssecs.sss,validitybit,latLeft.latRight,N,longLeft.LongRight,W,speed1.speed2, 'course1.course2,dayMonthyear,...,CRC SERIN GPSio,500,[WAIT("RMC,"),DEC2 hrs, DEC2 mins, DEC2 secs, WAIT(","), DEC latLeft, DEC latRight, SKIP 3, DEC longLeft, DEC longRight, SKIP 3, DEC speed1, DEC speed2, DEC course1, DEC course2] WRITE address, hrs address = address + 1 WRITE address, mins address = address + 1 WRITE address, secs address = address + 1 WRITE address, latLeft.HIGHBYTE address = address + 1 WRITE address, latLeft.LOWBYTE address = address + 1 WRITE address, latRight.HIGHBYTE address = address + 1 WRITE address, latRight.LOWBYTE address = address + 1 WRITE address, longLeft.HIGHBYTE address = address + 1 WRITE address, longLeft.LOWBYTE address = address + 1 WRITE address, longRight.HIGHBYTE address = address + 1 WRITE address, longRight.LOWBYTE address = address + 1 WRITE address, speed1.HIGHBYTE address = address + 1 WRITE address, speed1.LOWBYTE address = address + 1 WRITE address, speed2 address = address + 1 WRITE address, course1.HIGHBYTE address = address + 1 WRITE address, course1.LOWBYTE address = address + 1 WRITE address, course2 address = address + 1 'Parse GPGGA sentence for altitude & number of satellites (0-12) by counting commas '$GPGGA,hrsminssecs.SSS,latLeft.latRight,N,longLeft.LongRight,W,positionIndicator,numSatellites, ' HDOP,MSLaltitude,...,CRC SERIN GPSio, 500,[WAIT("GGA,"), WAIT(",") , WAIT(","), WAIT(","), WAIT(","), WAIT(","), WAIT(","), DEC numSats, WAIT(","), DEC alt1] WRITE address, numSats address = address + 1 WRITE address, alt1.HIGHBYTE address = address + 1 WRITE address, alt1.LOWBYTE address = address + 1 LOOP 'Parse GPRMC sentence by counting commas '$GPRMC,hrsminssecs.sss,validity bit,latLeft.latRight,N,longLeft.LongRight,W,speed1.speed2, 'course1.course2,dayMonthyear,...,CRC SERIN GPSio, 500,[WAIT("RMC,"), WAIT(",") , WAIT(","), WAIT(","), WAIT(","), WAIT(","), WAIT(","), WAIT(","), WAIT(","), DEC4 dayMonth, DEC2 year] WRITE address, dayMonth.HIGHBYTE 'start 3 byte footer for slotX datablock address = address + 1 WRITE address, dayMonth.LOWBYTE address = address + 1 WRITE address, year address = address + 1 GOTO slotNumControl 'endCollectData