// polygon method: traces a triangle and a pentagon, and takes a DifferentialPilot object as
  // method input
  public static void polygon(DifferentialPilot Pilot1) {
    // Triangle: having three sides, so for-loop goes from 1 to 3
    for (int i = 1; i <= 3; i++) {
      Pilot1.setTravelSpeed(5); // setting the travel and rotation speed for the robot
      Pilot1.setRotateSpeed(30);
      Pilot1.travel(24); // robot travels 2 feet forward
      Pilot1.stop();
      Delay.msDelay(300);
      Pilot1.rotate(120); // robot rotates left to form a 60 degree interior angle
      Pilot1.stop();
      Delay.msDelay(300);
    }
    Delay.msDelay(1300);

    // Pentagon: having five sides, so for-loop goes from 1 to 5
    for (int i = 1; i <= 5; i++) {
      Pilot1.setTravelSpeed(5); // setting the travel and rotation speed for the robot
      Pilot1.setRotateSpeed(30);
      Pilot1.travel(24); // robot travels 2 feet forward
      Pilot1.stop();
      Delay.msDelay(300);
      Pilot1.rotate(72); // robot rotates left to form 108 interior angle of pentagon
      Pilot1.stop();
      Delay.msDelay(300);
    }
    Delay.msDelay(1300);
  }
  // circle method: traces a semi-circle and a quarter circle
  // and takes two DifferentialPilot objects as method input
  public static void circle(DifferentialPilot Pilot1, DifferentialPilot Pilot2) {
    // Semi-Circle
    Pilot1.setTravelSpeed(5); // first drawing the arc for the semi-circle
    Pilot1.arc(36, 180); // robot arcs left for 180 degrees, guided by a 36 inch radius
    Pilot1.stop();
    Delay.msDelay(300);
    Pilot1.setRotateSpeed(30);
    Pilot1.rotate(90); // robot makes a 90 degree left turn
    Pilot1.stop();
    Delay.msDelay(300);
    Pilot1.setTravelSpeed(5);
    Pilot1.travel(
        72); // here, we're closing up the semi-circle (that is, tracing diameter of the circle)

    Delay.msDelay(1300);

    // Quarter-Circle
    Pilot2.setTravelSpeed(5);
    Pilot2.arc(12, 90); // robot arcs right for 90 degree (so forms 1/4 of circle)
    Pilot2.stop();
    Delay.msDelay(300);

    // loop to close up the quarter circle
    for (int l = 1; l <= 2; l++) {
      Pilot2.setRotateSpeed(30);
      Pilot2.rotate(90); // robot makes a 90 degree right turn
      Pilot2.stop();
      Delay.msDelay(300);
      Pilot2.setTravelSpeed(5);
      Pilot2.travel(12); // robot goes forward for 12 in (the radius of circle)
      Pilot2.stop();
      Delay.msDelay(300);
    }
  }
  /**
   * Stops the robot when the ultrasonic sensor detects a certain distance.
   *
   * @param stopDistance as long as the current distance is less than this stop distance, the robot
   *     will keep moving. Once the current distance is larger than the stop distance, the function
   *     returns.
   * @return the current distance upon stopping.
   */
  private boolean stopBeforeEdge() {
    int currentDistance = 0;
    int lightLevelReading;
    int distanceToObject;
    boolean edgeIsSafe = false;

    do {
      lightLevelReading = lightSensorDown.readValue();

      Motor.A.rotate(centerToEdgeDistance, true);
      Motor.C.rotate(centerToEdgeDistance, true);
    } while ((lightLevelReading > BLACK_WHITE_THRESHOLD)
        && (Motor.A.isMoving() && Motor.C.isMoving()));

    pilot.stop();

    lightLevelReading = lightSensorDown.readValue();

    /*
    distanceToObject = ultrasonicSensor.getDistance();

    if(distanceToObject < 20)
    {
    	edgeIsSafe = true;
    	Motor.A.setSpeed(1000);
    	Motor.C.setSpeed(1000);
    	pilot.setRotateSpeed(1000);
    	pilot.travel(280);
    	Delay.msDelay(10000);
    	return(edgeIsSafe);
    }

    if(lightLevelReading < BLACK_WHITE_THRESHOLD)
    {
    	System.out.println("Unsafe edge");
    	edgeIsSafe = false;
    	return(edgeIsSafe);
    }
    else if (lightLevelReading > BLACK_WHITE_THRESHOLD)
    {
    	System.out.println("Safe edge");
    	edgeIsSafe = true;
    	safeEdgeCount++;
    	return(edgeIsSafe);
    }

    */

    return (edgeIsSafe);
  }
 /**
  * If an abyss is detected, the robot will rotate 10 degrees, until the light sensor sees normal
  * ground again.
  */
 @Override
 public void action() {
   System.out.println("Abys");
   suppressed = false;
   while (lightSensor.getLightValue() < threshold && !suppressed) {
     pilot.rotate(10, true);
     if (!pilot.isMoving()) {
       Settings.whipAndBridgeCounter++;
     }
     Delay.msDelay(10);
   }
   while (pilot.isMoving() && !suppressed) {
     Thread.yield();
   }
   pilot.stop();
 }
 /** The robot moves along the Wall and turns to the right, if the wall is too far away. */
 @Override
 public void action() {
   suppressed = false;
   Settings.motorAAngle = Settings.SENSOR_RIGHT;
   while (!suppressed
       && !((Settings.TOUCH_L.isPressed() || Settings.TOUCH_R.isPressed()))
       && Settings.LIGHT.getLightValue() < 80) {
     if (sonic.getDistance() > (distanceToWall + 10)) {
       pilot.arc(-15, -90, true);
     } else if (sonic.getDistance() <= distanceToWall) {
       pilot.arc(40, 20, true);
     } else if (sonic.getDistance() > distanceToWall) {
       pilot.arc(-60, -20, true);
     }
   }
   if (Settings.LIGHT.getLightValue() >= 80) {
     pilot.stop();
     System.out.println("LINE Detected");
     Settings.afterSlider = true;
     Settings.motorAAngle = Settings.SENSOR_FRONT;
     Settings.PILOT.setTravelSpeed(Settings.PILOT.getMaxTravelSpeed() * 0.15);
   }
 }
Beispiel #6
0
 private boolean stop() {
   pilot.stop();
   return true;
 }
Beispiel #7
0
 // Called once after isFinished returns true
 protected void end() {
   p.stop();
   drivetrain.tankDrive(0, 0);
   drivetrain.disableControl();
 }