'{$STAMP BS2}
'{$PBASIC 2.5}
'Altimeter 12 Bit scottalt1_2.bs2
'Version 1.2

' [Declarations]
adcBits VAR Word
maxalt VAR Word
grndlevel VAR Word
maindeploy VAR Word
delaybits VAR Word
x VAR Word
grnd DATA Word 4095
log DATA Word 4095

' [Initialization]

CS PIN 0
CLK PIN 1
DataOutput PIN 2
DEBUG CLS

' [Main Routine]

PAUSE 3000 ' Warm up delay

HIGH CS ' Records initial
LOW CS ' ground level
LOW CLK ' altitude.
PULSOUT CLK, 210 '
SHIFTIN DataOutput,CLK,MSBPOST,[grndlevel\13] '
WRITE grnd, Word grndlevel '
DEBUG "Start Altitude ", DEC4 grndlevel '

DO 'Mach Delay stops
HIGH CS 'readings for set amount
LOW CS 'of time in PAUSE.
LOW CLK '
PULSOUT CLK, 210 '
SHIFTIN DataOutput,CLK,MSBPOST,[grndlevel\13] '
READ grnd, Word delaybits '
LOOP UNTIL grndlevel +3 < delaybits: PAUSE 4000 '

DO 'Starts main loop.
GOSUB ADC_Data
GOSUB display
GOSUB record
GOSUB deploy
LOOP

' [Subroutines]
ADC_Data: 'Gathers data from sensor.
HIGH CS
LOW CS
LOW CLK
PULSOUT CLK, 210
SHIFTIN DataOutput,CLK,MSBPOST,[adcBits\13]
RETURN

Display: 'Display on Terminal.
DEBUG HOME
DEBUG CR, CR, "Altitude: ", DEC4 adcBits
RETURN

record: 'Record to eeprom.
READ log, Word maxalt
DEBUG CR, "max altitude", DEC4 maxalt
IF adcbits < maxalt THEN WRITE log, Word adcbits
PAUSE 100
RETURN

deploy: 'Apogee deploy code.
IF maxalt + 3 < adcbits THEN HIGH 3 'The (+3) adds delay to deployment.
IF maxalt + 3 < adcbits THEN GOTO main
RETURN
main: 'Main deploy code.
x = grndlevel - maxalt / 7
maindeploy = grndlevel - x
DEBUG CR, "main deployment", DEC4 maindeploy
IF adcbits > maindeploy THEN HIGH 4
IF adcbits > maindeploy THEN END 'Once main has fired, end.
RETURN