import lejos.nxt.*;
import lejos.util.*;
import lejos.robotics.subsumption.*;
import lejos.robotics.navigation.*;

/**
  trying a FIRST lejos.robotics.subsumption/
  Behavior-based robotics example:

  this application sets up an arbitrator to control
  a robot with just TWO possible behaviors,
  BehaviorProximity and BehaviorForward

  @author Bagnall - based on course textbook Chapter 14 example,
          pp. 278-279
  @author adapted by Sharon Tuttle
  @version 2015-03-04
*/

public class TwoBehaviors
{
    // data fields

    private static final int INIT_SPEED = 40;
    private static final int INIT_ROTATION_SPEED = 80;

    /**
        set up and start an Arbitrator to manage
        a two-behaviors robot
    **/

    public static void main(String[] args)
    {
        UltrasonicSensor ultraSensor = new UltrasonicSensor(SensorPort.S1);
        DifferentialPilot robot = new DifferentialPilot(56F, 120F, 
			  	                Motor.B, Motor.C);
        robot.setTravelSpeed(INIT_SPEED);
	robot.setRotateSpeed(INIT_ROTATION_SPEED);

        Behavior[] behaviorArray = 
            {new BehaviorForward(robot),
	         new BehaviorProximity(robot, ultraSensor)};

        Arbitrator anArbitrator = new Arbitrator(behaviorArray);
        anArbitrator.start();
    }
}