' ========================================================================= ' ' File....... Sequencer.BS2 ' Purpose.... Sequencer Engine for Props ' Author..... Jon Williams -- Parallax, Inc. ' E-mail..... jwilliams@parallax.com ' Started.... ' Updated.... 07 JUN 2005 ' ' {$STAMP BS2} ' {$PBASIC 2.5} ' ' ========================================================================= ' -----[ Program Description ]--------------------------------------------- ' -----[ Revision History ]------------------------------------------------ ' -----[ I/O Definitions ]------------------------------------------------- Trigger PIN 15 ' -----[ Constants ]------------------------------------------------------- Yes CON 1 ' for active-high input No CON 0 DelayRes CON 100 ' delay resolution ' -----[ Variables ]------------------------------------------------------- pntr VAR Word ' record pointer ctrl VAR Word ' control outputs timer VAR Byte ' 0.1 to 25.5 seconds ' -----[ EEPROM Data ]----------------------------------------------------- RecLen CON 3 ' 3 bytes per record ZigZag DATA Word %0000000010000000, 2 DATA Word %0000000101000000, 2 DATA Word %0000001000100000, 2 DATA Word %0000010000010000, 2 DATA Word %0000100000001000, 2 DATA Word %0001000000000100, 2 DATA Word %0010000000000010, 2 DATA Word %0100000000000001, 2 DATA Word %0010000000000010, 2 DATA Word %0001000000000100, 2 DATA Word %0000100000001000, 2 DATA Word %0000010000010000, 2 DATA Word %0000001000100000, 2 DATA Word %0000000101000000, 2 DATA Word %0000000010000000, 2 DATA Word %0000000000000000, 0 ' -----[ Initialization ]-------------------------------------------------- Reset: DIRS = %0111111111111111 ' set outputs (1) ' -----[ Program Code ]---------------------------------------------------- Main: DO : LOOP WHILE (Trigger = No) ' wait here for trigger Sequencer: pntr = 0 ' reset record pointer DO READ pntr, Word ctrl, timer ' read record IF (timer > 0) THEN OUTS = ctrl ' update outputs GOSUB Delay ' hold outputs pntr = pntr + RecLen ' update record pointer ELSE EXIT ' sequence is done ENDIF LOOP GOTO Main ' -----[ Subroutines ]----------------------------------------------------- Delay: DO WHILE (timer > 0) PAUSE DelayRes ' hold timer = timer - 1 ' update timer LOOP RETURN