' -----[ Title ]------------------------------------------------------- ' {$PORT COM3} 'Alien program Alien.bs2 ' description Flashes lights, lowers-raises doors, plays sounds '{$STAMP BS2} '{$PBASIC 2.5} ' -----[ EEPROM Data ]------------------------------------------------- 'Copyright DATA "I","v","a","n","H","e","r","r","i","n","g", ' "2","0","1","3" Notes DATA "C","C","G","G","A","A","G" Frequencies DATA Word 2093, Word 2093, Word 3136, Word 3136, Word 3520, Word 3520, Word 3136 Durations DATA Word 500, Word 500, Word 500, Word 500, Word 500, Word 500, Word 1000 'mouse VAR Bit ' Value can be 0 or 1 'cat VAR Nib ' Value can be 0 to 15 'dog VAR Byte ' Value can be 0 to 255 'rhino VAR Word ' Value can be 0 to 65535 Mainindex VAR Byte index VAR Nib noteLetter VAR Byte noteFreq VAR Word noteDuration VAR Word ' -----[ I/O Definitions ]--------------------------------------------- ' TopLight PIN 6 ' GreenLight PIN 7 'yel-white red wire is positive ' RedLight PIN 8 'black or blue of set is ground Siren PIN 13 'on board only- sounds or plays twinkle ' -----[ Constants ]--------------------------------------------------- 'PULSOUT 1050 TO 450 V2: Down 1900 Up 1200 '1900 gives PULSOUT value 950 '1200 gives PULSOUT value 600 Down CON 894'888 ' x2usec = 1900 Up CON 678'666 ' x2usec = 1200 ' -----[ Variables ]--------------------------------------------------- counter VAR Word ' General purpose counter. ' -----[ Initialization ]---------------------------------------------- ' -----[ MAIN Program Code ]------------------------------------------- 'Command Loop so program can "RESET" Command_LOOP: DEBUG "Program started",CR 'Print to computer screen DO 'Do a MAIN LOOP GOSUB Hyperspaced GOSUB RaiseDoor FOR counter= 700 TO 800 STEP 30 'gradual raise door PULSOUT 15, counter 'PAUSE 20 PULSOUT 0,2000 GOSUB Hyperspaced NEXT GOSUB Hyperspaced GOSUB LowerDoor PULSOUT 0,50000 'Flash the top light FOR Mainindex = 0 TO 3 GOSUB RunLeds 'Flash some LEDs NEXT PULSOUT 0,50000 GOSUB Hyperspaced GOSUB RaiseDoor 'LowerDoor FOR Mainindex = 0 TO 1 GOSUB RunLeds NEXT GOSUB PlayTwinkle GOSUB LowerDoor 'RaiseDoor PULSOUT 0,50000 LOOP RETURN ' of command loop yes it is redundant after Loop END ' -----[LED Subroutines - _________ ]----------------------------- '///////////////////////////////////////////////////// RunLeds: PULSOUT 0,50000 GOSUB PulseBase PULSOUT 0,50000 GOSUB PulseWired PULSOUT 0,50000 GOSUB AllOn PULSOUT 0,50000 GOSUB PulseEven PULSOUT 0,50000 GOSUB PulseOdd PULSOUT 0,50000 GOSUB PulseAll RETURN '///////////////////////////////////////////////////// AllOn: FOR index = 0 TO 1 HIGH 0 HIGH 1 HIGH 2 HIGH 3 HIGH 4 HIGH 5 HIGH 6 HIGH 7 HIGH 8 HIGH 9 HIGH 10 HIGH 11 HIGH 12 PAUSE 500 LOW 0 LOW 1 LOW 2 LOW 3 LOW 4 LOW 5 LOW 6 LOW 7 LOW 8 LOW 9 LOW 10 LOW 11 LOW 12 PAUSE 500 NEXT RETURN PulseEven: PULSOUT 0,50000 PULSOUT 2,50000 PULSOUT 0,50000 PULSOUT 4,50000 PULSOUT 0,50000 PULSOUT 6,50000 PULSOUT 0,50000 PULSOUT 8,50000 PULSOUT 0,50000 PULSOUT 10,50000 PULSOUT 0,50000 PULSOUT 12,50000 RETURN PulseOdd: PULSOUT 1,50000 PULSOUT 0,50000 PULSOUT 3,50000 PULSOUT 0,50000 PULSOUT 5,50000 PULSOUT 0,50000 PULSOUT 7,50000 PULSOUT 0,50000 PULSOUT 9,50000 PULSOUT 0,50000 PULSOUT 11,50000 RETURN PulseWired: PULSOUT 0,50000 PULSOUT 1,50000 PULSOUT 0,50000 PULSOUT 2,50000 PULSOUT 0,50000 PULSOUT 3,50000 RETURN PulseBase: PULSOUT 4,50000 PULSOUT 0,50000 PULSOUT 5,50000 PULSOUT 0,50000 PULSOUT 6,50000 PULSOUT 0,50000 PULSOUT 7,50000 PULSOUT 0,50000 PULSOUT 8,50000 PULSOUT 0,50000 PULSOUT 9,50000 PULSOUT 0,50000 PULSOUT 10,50000 PULSOUT 0,50000 PULSOUT 11,50000 PULSOUT 0,50000 PULSOUT 12,50000 PULSOUT 0,50000 RETURN PulseAll: PULSOUT 0,50000 PULSOUT 1,50000 PULSOUT 0,50000 PULSOUT 2,50000 PULSOUT 0,50000 PULSOUT 3,50000 PULSOUT 0,50000 PULSOUT 4,50000 PULSOUT 0,50000 PULSOUT 5,50000 PULSOUT 0,50000 PULSOUT 6,50000 PULSOUT 0,50000 PULSOUT 7,50000 PULSOUT 0,50000 PULSOUT 8,50000 PULSOUT 0,50000 PULSOUT 9,50000 PULSOUT 0,50000 PULSOUT 10,50000 PULSOUT 0,50000 PULSOUT 11,50000 PULSOUT 0,50000 PULSOUT 12,50000 PULSOUT 0,50000 RETURN ' -----[ Subroutine - _________ ]----------------------------- '///////////////////////////////////////////////////// '///////////////////////////////////////////////////// PlayTwinkle: DEBUG "Note Duration Frequency", CR, "---- -------- ---------", CR FOR index = 0 TO 6 HIGH 0 HIGH 10 HIGH 11 HIGH 12 READ Notes + index, noteLetter DEBUG " ", noteLetter READ Durations + (index * 2), Word noteDuration DEBUG " ", DEC4 noteDuration READ Frequencies + (index * 2), Word noteFreq DEBUG " ", DEC4 noteFreq, CR FREQOUT Siren, noteDuration, noteFreq LOW 0 LOW 10 LOW 11 LOW 12 NEXT RETURN ' -----[ Subroutine - _________ ]----------------------------- '///////////////////////////////////////////////////// '///////////////////////////////////////////////////// '///////////////////////////////////////////////////// 'Hyperspaced: notification of completion '///////////////////////////////////////////////////// Hyperspaced: PULSOUT 0,50000 PAUSE 100 FOR noteDuration = 15 TO 1 'STEP 1 Step 1 is Normal? change FOR noteFreq = 2000 TO 2500 STEP 20 FREQOUT Siren, noteDuration, noteFreq NEXT PULSOUT 0,50000 NEXT PULSOUT 0,50000 HIGH 0 FREQOUT Siren, 2000, 2000, 2010 LOW 0 PULSOUT 0,50000 RETURN '///////////////////////////////////////////////////// '///////////////////////////////////////////////////// RaiseDoor: 'Raise door SLOWLY Down Up FOR counter= Down TO Up STEP 10 'gradual raise door PULSOUT 15, counter 'PAUSE 20 PULSOUT 0,2000 NEXT PULSOUT 15, Up '15: 'dunno what step does to leftovers PAUSE 20 RETURN LowerDoor: 'Lower door SLOWLY FOR counter= Up TO Down STEP 10 'gradual raise door PULSOUT 15, counter 'PAUSE 20 PULSOUT 0,2000 NEXT PULSOUT 15, Down '15: 'dunno what step does to leftovers PAUSE 20 RETURN '///////////////////////////////////////////////////// 'NO MORE CODE :) '///////////////////////////////////////////////////// END 'just in double case, yes some more wasted code space :)