' ' hercules.bas ' include "regs11.lib" const DARK = 0 const LIGHT = 1 const FWD = %010111 const LEFT = %011001 const RIGHT = %100110 const STOP = %000000 declare value declare wait declare n declare righteye declare lefteye declare rightdark declare leftdark declare rightlight declare leftlight declare seek declare seekcntr declare delta interrupt $fff0 ' RTI if wait <> 0 wait = wait - 1 endif if seekcntr <> 0 seekcntr = seekcntr - 1 endif pokeb tflg2, %01000000 end sense_ambient: gosub sense ' look at ambient rightdark = righteye * 2 leftdark = lefteye * 2 rightlight = righteye / 2 leftlight = righteye / 2 return sense: pokeb adctl, $10 ' multi-chnl, 1-4 waituntil adctl, $80 ' loop until conversion complete lefteye = peekb(adr1) ' get left eye righteye = peekb(adr2) ' get right eye return main: pokeb tflg2, %01000000 pokeb tmsk2, %01000000 pokeb option, peekb(option) or $80 ' turn on A/D system seek = DARK ' start by seeking dark seekcntr = 30*250 gosub sense_ambient wait = 0 interrupts on do if wait = 0 gosub sense if seek = DARK if righteye > rightdark if lefteye > leftdark pokeb portb, STOP else pokeb portb, RIGHT endif else if lefteye > leftdark pokeb portb, LEFT else if righteye < lefteye if lefteye - righteye > 20 pokeb portb, LEFT else pokeb portb, FWD endif else if righteye - lefteye > 20 pokeb portb, RIGHT else pokeb portb, FWD endif endif endif endif else if righteye < rightlight if lefteye < leftlight pokeb portb, STOP else pokeb portb, RIGHT endif else if lefteye < leftlight pokeb portb, LEFT else if righteye > lefteye if righteye - lefteye > 20 pokeb portb, LEFT else pokeb portb, FWD endif else if lefteye - righteye > 20 pokeb portb, RIGHT else pokeb portb, FWD endif endif endif endif endif wait = 250 ' run for 1 second endif if seekcntr = 0 gosub sense_ambient seekcntr = 30 * 250 if seek = DARK seek = LIGHT else seek = DARK endif endif loop end