' Flight2002-2.bs2 ' by John Nordlie, September 9, 2002 ' This program is the flight sequencer and id transmitter for ' the High Altitude Research Group balloon ' ** set up variables ** x var byte ' x, z, and i are loop counters z var byte i var byte pics var byte ' pics is number of 35mm pictures left master var word ' master mission clock btnWk var byte ' work variable for button command btnWk = 0 ' ** set output ports ** output 0 ' pin 0 is the horizontal 35mm camera servo output 1 ' pin 1 keys the transmitter output 2 ' pin 2 is the audio output to the transmitter output 3 ' pin 3 is the audio output to the speaker output 4 ' pin 4 is cutdown servo output 6 ' pin 6 is the verticle 35mm camera servo ' ** initialize variables ** z = 5 ' set 35mm camera countdown pics = 36 ' set number of 35mm pics remaining master = 40 ' set mission master clock to 90 min. to cutdown (134 sec per cycle) ' ** park servos for i=1 to 50 ' move cutdown servo to closed position pulsout 4,1100 pause 20 next for i=1 to 50 ' move the servo to the shutter up position pulsout 0,200 pause 20 next for i=1 to 50 ' move the servo to the shutter up position pulsout 6,200 pause 20 next gosub bethoven ' beep speaker to let us know the computer is awake ' ** start of main program ** start: gosub track ' transmit 30 second tracking signal pause 1000 ' wait for APRS packet gosub id ' Transmit 11.4 second tone pause 1000 ' wait for APRS packet for x=1 to 35 ' beep the speaker 35 times gosub beep next if z=0 then takepic ' if its time, take a picture ret3: z = z - 1 ' decrement camera loop count master = master - 1 ' decrement master mission clock if master=0 then cutdown ' if its time, cut the balloon free ret4: goto start ' do it all again ' ** main program ends, procedures start here ** ' ** procedure takepic causes the 35mm camera to take a picture ** takepic: if pics=0 then skippic ' if no more film left, skip the pic for i=1 to 50 ' move the servos to the shutter down position pulsout 0,1100 pause 20 next for i=1 to 50 pulsout 6,1100 pause 20 next for i=1 to 50 ' move the servos to the shutter up position pulsout 0,200 pause 20 next for i=1 to 50 pulsout 6,200 pause 20 next pics=pics - 1 ' decrement number of photos left skippic: z = 1 ' reset counter to 1 loops goto ret3 ' ** procedure beep causes the on-board speaker to play some notes ** beep: freqout 3,500,1000 freqout 3,500,1500 freqout 3,500,2000 freqout 3,500,1500 freqout 3,500,2000 return ' ** procedure track transmits a 30 second audio tone for tracking purposes. track: high 1 ' key transmitter pause 500 ' wait for squelch to open freqout 2, 30000, 1250 ' output 30 sec tone for tracking pause 1000 low 1 ' release transmitter key return ' ** procedure id transmits 12.9 seconds of tone ** id: high 1 ' key transmitter pause 500 freqout 2,11400,1000 ' transmit tracking tone pause 1000 low 1 ' release radio key return ' ** procedure cutdown fires the relay which triggers the cut-down mechanism cutdown: high 1 ' key transmitter pause 500 ' wait for squelch to open freqout 2,400,2000 ' play a tune on the radio pause 20 freqout 2,400,1800 pause 20 freqout 2,400,1400 pause 20 freqout 2,400,1200 pause 20 freqout 2,400,1000 pause 20 freqout 2,400,800 pause 20 freqout 2,600,600 pause 100 low 1 ' release transmitter key freqout 3,400,2000 ' play a tune on the speaker pause 20 freqout 3,400,800 pause 20 freqout 3,400,2000 pause 20 freqout 3,600,800 for i=1 to 200 ' move cutdown servo to open position pulsout 4,150 pause 20 next for i=1 to 200 ' move cutdown servo to open position pulsout 4,150 pause 20 next for i=1 to 200 ' move cutdown servo to open position pulsout 4,150 pause 20 next for i=1 to 200 ' move cutdown servo to open position pulsout 4,150 pause 20 next master = 2000 ' reset master mission clock to something absurd (66 hours) goto ret4 ' ** procedure b5 plays a familiar tune ** bethoven: freqout 3,400,2000 pause 20 freqout 3,400,2000 pause 20 freqout 3,400,2000 pause 20 freqout 3,600,800 return