--------------LISTING--OF--ANIMATRONIC--SEQUENCER--PROGRAM------------
' COSTUME MASK ANIMATRONICS SEQUENCER
' -----------------------------------
' COPYRIGHT (C) 1996 BY KEVIN KELM
' ALL RIGHTS RESERVED
' PERMISSION TO USE GRANTED FOR HOBBY, NON-PROFIT USE ONLY.
' CONTACT kkelm@triggur.org FOR ALL OTHER USAGE PERMISSIONS.
'
' VERSION: 1.0
'   1.0: initial creation, testing.  12/28/96

nummotors	CON	2	' # motors in costume
maxmotor	CON	nummotors-1
numpositions	CON	6 	' # positions in sequence
maxpos		CON	numpositions-1
positionsize	CON	nummotors
numsequences	CON	4	' # sequences in memory
maxseq		CON	numsequences-1
sequencesize	CON	nummotors * numpositions + 1
buflen		CON	numsequences * sequencesize
buf		DATA	WORD (buflen)

i	VAR	WORD		' general looping
j	VAR	WORD		' general looping
btmp0	VAR	BYTE		' for debounce
btmp1	VAR	BYTE		' for debounce
btmp2 	VAR	BYTE		' for debounce
btmp3	VAR	BYTE		' for debounce
btmp4	VAR	BYTE		' for debounce
rtmp	VAR	WORD		' for randomizing
progit	VAR	IN11		' program or run mode? 
thumb	CON	7		' thumb button
fore    VAR	IN6		' forefinger button
middle	VAR	IN5		' middle finger button
nseq	CON	11		' next sequence/program selector
npos	CON	12		' next position
nmot	CON	13		' next motor
mdec	CON	14		' motor decrement
minc	CON	15		' motor increment
baud	CON	84+$4000	' baud rate to motion controller
delta	CON	1		' ticks to move the motor (pgrm mode)

cseq		VAR	WORD	' current sequence #
seqptr		VAR	WORD	' pointer to cseq
cpos		VAR	WORD	' current position #
maxposseq	VAR	WORD	' max pos # in cseq
' WARNING: maxposseq currently not used
cmot		VAR	WORD	' current motor #
countdown	VAR	WORD	' ticks til next move
countdownreset	CON	30	' 30 * 100ms = 3s delay
maxrandval	CON	15	' because 'RANDOM' seems broken
randvals	DATA	1,2,5,4,1,0,3,5,1,2,0,4,1,2,5,3
crand		VAR	BYTE	' current 'random' offset

dirs = 0	' set I/O pin directions
dir0 = 1

btmp0 = 0
btmp1 = 0
btmp2 = 0
btmp3 = 0
btmp4 = 0
cseq = 0
crand = 0
GOSUB new_sequence

IF progit = 1 THEN do_program	' goto program mode if sequence on

do_run:				' move motors in sequence
  BUTTON thumb,1,255,100,btmp0,1,do_rseq
  PAUSE 100
  countdown = countdown - 1
  IF countdown > 0 THEN do_run1
    READ randvals+crand,cpos
    crand = crand + 1
    IF crand <= maxrandval THEN do_run2
      crand = 0
do_run2:
    cpos = cpos // numpositions
    GOSUB set_motors
    countdown = countdownreset
do_run1:
  GOTO do_run

do_rseq:			' new sequence selected
   cseq = fore * 2 + middle	' value 0..3
   GOSUB new_sequence
   GOTO do_run   

do_program:
  IF progit = 1 THEN do_program  ' wait for button up

prog_loop:
  BUTTON nseq,1,255,100,btmp0,1,do_pseq
  BUTTON npos,1,255,100,btmp1,1,do_ppos
  BUTTON nmot,1,255,100,btmp2,1,do_pmot
  BUTTON mdec,1,250,1,btmp3,1,do_pdec
  BUTTON minc,1,250,1,btmp4,1,do_pinc
  GOTO prog_loop

do_pseq:			' select a new sequence
  cseq = cseq + 1
  IF cseq <= maxseq THEN do_pseq1
    cseq = 0
do_pseq1:        
  GOSUB new_sequence
  GOTO prog_loop

do_ppos:			' select a new position
  cpos = cpos + 1
  IF cpos <= maxposseq THEN do_ppos1
    cpos = 0
do_ppos1:
  GOSUB set_motors
  GOTO prog_loop

do_pmot:			' select a new motor
  cmot = cmot + 1
  IF cmot <= maxmotor THEN do_pmot1
    cmot = 0
do_pmot1:
  GOSUB set_motors
  GOTO prog_loop

do_pdec:			' decrement motor pos
  READ cpos * positionsize + seqptr + cmot,j
  IF j > delta THEN do_pdec1
    j = 0
    GOTO do_pdec2
do_pdec1:
    j = j - delta
do_pdec2:
  WRITE cpos * positionsize + seqptr + cmot, j
  GOSUB set_motors
  GOTO prog_loop

do_pinc:			' increment motor pos
  READ cpos * positionsize + seqptr + cmot,j
  IF 254 - delta > j THEN do_pinc1
    j = 254
    GOTO do_pinc2
do_pinc1:
    j = j + delta
do_pinc2:
  WRITE cpos * positionsize + seqptr + cmot, j
  GOSUB set_motors
  GOTO prog_loop

set_motors: 			' move all motors
  FOR i = 0 TO maxmotor
    READ cpos * positionsize + seqptr + i, j
    SEROUT 0,baud,1,[255,i,j]
  NEXT
  RETURN

new_sequence:
  seqptr = cseq * sequencesize
  ' READ seqptr,maxposseq
  maxposseq = maxpos
  seqptr = seqptr + 1
  countdown = countdownreset
  cpos = 0
  GOSUB set_motors
  RETURN 

---------------------------END--OF--LISTING---------------------------

Click here to go back to the main construction page.


Copyright (C) 1996, 1997 by Kevin Kelm