\ SCAN1.TXT - PEAK SCANNER FOR THE SEEKER
\
\ REQUIRES: DIFFMOTOR3.TXT LIGHT.TXT FILTER1.TXT

    0 VALUE SCAN_CURRENT_PEAK
32767 VALUE SCAN_CURRENT_MIN
   8  VALUE SCAN_TURN_DELAY
   30 VALUE SCAN_STEPS

\ The SCAN_FOR_PEAK word will put the highest value
\ it finds in its scan into SCAN_CURRENT_PEAK

RCX_INIT
SENSOR_INIT
1 SENSOR_LIGHT_MAKE

\ And make a filter for the light sensor average too

FILTER_CREATE SCAN_AVERAGE
16 1 SENSOR_LIGHT_GET SCAN_AVERAGE FILTER_INIT

: SCAN_FOR_PEAK
  \ Initialize the peak detector
  0     TO SCAN_CURRENT_PEAK
  32767 TO SCAN_CURRENT_MIN

  SCAN_STEPS 0 DO
    \ Now figure out if we need to store the new peak
    \ or minimum values

    1 SENSOR_LIGHT_GET

    DUP SCAN_AVERAGE FILTER_PUT

    DUP SCAN_CURRENT_PEAK >
    IF  DUP TO SCAN_CURRENT_PEAK
    THEN

    DUP SCAN_CURRENT_MIN <
    IF  DUP TO SCAN_CURRENT_MIN
    THEN
    
    DROP

    \ Now spin the robot to the left for some time
    BOT_LEFT
    SCAN_TURN_DELAY 0 timer_SET
    BEGIN
      0 timer_GET 0=
    UNTIL
    BOT_STOP
  LOOP ;
