// 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); } }
private boolean stop() { pilot.stop(); return true; }
// Called once after isFinished returns true protected void end() { p.stop(); drivetrain.tankDrive(0, 0); drivetrain.disableControl(); }