Our Function Library (Fall 2020)
A
function library is a set of functions, variables, constants, and algorithms that are
included with the basic RobotC programs. The functions and variables in the library can then be referenced and called upon as needed in your program.
The purpose of keeping these functions and variables in one file is to make your programs more modular. Many programs can refer to and use the same function library.
Cargo Plane
///////////////////////////////////////////////////////////////////////////////
// Release the plane
//
void baseToCargoPlane() {
setPowerLevel(50);
driveForward(2); // Start Moving a little
backIntoWall(40); // Back into South Wall
driveForward(1.5); // Move away from the South wall
pointTurnClockwise(90); // Turn to face the East
backIntoWall(40); // Back into West Wall and face the plane
accessoryDown(); // Reset the arm
accessoryUp(60); // Get the Arm ready for the plane launcher
driveForward(); // Move a little away from the wall
untilDistance(6);
setPowerLevel(30);
driveForward();
untilLine(40);
//stopOnLine(40);
setPowerLevel(50);
driveForward(10); // Move toward the plane launcher
}
void releaseCargoPlane() {
setPowerLevel(30);
int angleTowardRedLever = 46; // Let's initialize a variable to store the degrees to turn toward the red lever
pointTurnClockwise(angleTowardRedLever); // Turn toward the Red lever
driveForward(4); // Move toward the Red lever
accessoryDown(); // Depress the lever
accessoryUp(30); // Get the arm off of the lever
pointTurnCounterClockwise(angleTowardRedLever); // Face the East wall again
driveForward(5);
pointTurnClockwise(40); // Face the Water Bottle
accessoryDown(); // Get arm ready for pick up
gradualTurnCounterClockwise(10,6); // Turn toward the water
driveForward(1); // Spear the water bottle
accessoryUp(30); // Pick up the Water
//
// Go from the plane to the Green Man
//
setPowerLevel(30);
driveBackward(2); // Now that you have the water, backup and turn a little
pointTurnCounterClockwise(120);
backIntoWall();
driveForward();untilDistance(11);// driveForward(11);
swingTurnClockwise(45);
driveForward();untilLine(); // The line by the house
driveForward();untilDistance(3);// Drive a little bit beyond the line
pointTurnCounterClockwise(42); // Aim toward the Green Man
driveBackward(0.5);
}
Man and House
void baseToGreenMan() {
}
void getGreenManAndHouse() {
accessoryDown(); // Put arm down to Get the Green person by the house
driveForward(5);
accessoryUp(60);
driveBackward(1);
pointTurnClockwise(20); // Turn a little away from the house
driveForward(1); // Move to the East of the house
pointTurnCounterClockwise(5); // Turn toward the North wall
driveForward(2); // Move to the East of the house
pointTurnCounterClockwise(20); // Turn toward the North wall
//
// Get Ready to Lift the House
//
setPowerLevel(20); // Slow down when approaching the wall
followLine(RIGHTSIDE);
stopIfSonarLessThan(4);
driveForward();
setPowerLevel(15); // Slow down even more when approaching the wall
driveForward(2.4);
pointTurnClockwise(85);
driveBackward(2);
setPowerLevel(30); // Restore default power
pointTurnClockwise(5);
driveBackward(8);
//
// Now get the Gas Can
//
driveForward();
stopOnLine();
driveForward(8);
pointTurnClockwise(90);
backIntoWall();
driveForward(2); // Move away from North Wall
pointTurnCounterClockwise(87); // Turn toward the Gas Can
accessoryDown(); // Prepare the Arm
}
Gas Can
void baseToGasCan() {
driveForward(2); // Start Moving a little
backIntoWall(40); // Back into South Wall
driveForward(6); // Move away from the South wall
pointTurnClockwise(90); // Turn to face the East
backIntoWall(40); // Back into West Wall and face the plane
accessoryDown(); // Reset the arm
accessoryUp(60); // Get the Arm ready for the plane launcher
driveForward(7); // Move a little away from the wall
stopOnLine(50); // Border of the Base roughly at the north east corner
gradualTurnCounterClockwise(45,17);// Move toward the center of the board
driveForward();
stopOnLine();
driveForward(5); // Drive a little bit beyond the line
pointTurnCounterClockwise(42); // Aim toward the North Wall
followLine(RIGHTSIDE);
untilSonarLessThan(4);
stopMoving();
driveForward(2);
pointTurnClockwise(180);
backIntoWall();
driveForward(1); // Move away from North Wall
pointTurnCounterClockwise(87); // Turn toward the Gas Can
accessoryDown();
//driveForward(3);
}
void getGasCan() { // Robot is starting with back to the North Wall
driveForward(3); // This mission does the Gas Can, Sign, and Battery
accessoryDown();
driveForward(3);
accessoryDown();
driveForward(2);
accessoryUp(60); // Raise the Gas Can
pointTurnClockwise(45);
setPowerLevel(50);
driveForward();untilDistance(10);
accessoryDown(); // Crawl under the string
driveForward();untilDistance(9);
accessoryUp(60);
setPowerLevel(40); // Slow down when approaching the line
driveForward(); // Move toward the line slowly
untilLine(); // Stop
setPowerLevel(30); // Resume default power level
driveBackward();untilDistance(8);// Get ready to raise the sign
pointTurnCounterClockwise(48);
driveForward();
stopIfSonarLessThan(4);
driveForward(6); // Push the sign up
int BatteryDistanceEWShort = 2;
driveBackward(BatteryDistanceEWShort);
pointTurnClockwise(98);
driveForward();stopOnLine();
driveBackward();untilDistance(9);
int angleTowardBattery = 75; // Let's initialize a variable to store the degrees to turn toward the battery
pointTurnCounterClockwise(angleTowardBattery);
accessoryDown();
driveForward(BatteryDistanceEWShort);
accessoryUp(65);
driveBackward();untilDistance(1);
pointTurnClockwise(angleTowardBattery-3);
driveForward();stopOnLine();
pointTurnCounterClockwise(50);
driveForward(); // Drive into the Corner
untilDistance(6);
accessoryDown(); // Drop off your stuff
untilDistance(2);
driveBackward(); // Back out of the corner
stopAfterDistance(14);
driveBackward();
gradualTurnCounterClockwise(45,18);
driveBackward(5);
accessoryUp(100);
driveForward();
untilLine(); // Find the line next to the Earthquake
driveForward(4);
pointTurnCounterClockwise(87); // Turn and Face the Buildings
setPowerLevel(30);
}
Earthquake
void baseToEarthquake() { // Robot needs to be centered over black line facing the North Wall
driveForward(2); // Start Moving a little
backIntoWall(40); // Back into South Wall
driveForward(6); // Move away from the South wall
pointTurnClockwise(90); // Turn to face the East
backIntoWall(40); // Back into West Wall and face the plane
accessoryDown(); // Reset the arm
accessoryUp(100); // Get the Arm ready for the plane launcher
driveForward(7); // Move a little away from the wall
stopOnLine(50); // Border of the Base roughly at the north east corner
gradualTurnCounterClockwise(45,17);// Move toward the center of the board
setPowerLevel(50);
driveForward();
stopOnLine();
driveForward(5); // Drive a little bit beyond the line
gradualTurnClockwise(48,12); // Aim toward the North Wall
driveForward(5);
driveForward();
stopOnLine();
setPowerLevel(30);
driveForward(4);
pointTurnCounterClockwise(87); // Turn and Face the Buildings
driveBackward(4);
}
void getEarthquake() { // Robot is centered over black line facing the North Wall
driveForward(); // This mission does the Earthquake, Tsunami, Ambulance
untilSonarLessThan(4);
driveForward(4, 70);
setPowerLevel(50);
driveBackward(1);
// Now position the robot so that it will get the Flashlight, Cat, and Dog
pointTurnCounterClockwise(87); // Turn toward the West
driveForward(); // Find the line next to the house
stopOnLine();
pointTurnCounterClockwise(90);
backIntoWall();
setPowerLevel(30);
driveForward(1);
pointTurnClockwise(97);
setPowerLevel(50);
driveForward(12);
stopMoving();
pointTurnCounterClockwise(15);
driveForward(); // Find the line next to the house
stopOnLine();
driveBackward(3);
pointTurnCounterClockwise(90);
backIntoWall(); // Align with North wall
setPowerLevel(30); // Move slower
driveForward(2); // Move Away from the wall
pointTurnClockwise(130); // Turn toward the flashlight
accessoryDown(); // Get Arm Ready
driveForward(2, 20); // Spear the Flashlight
accessoryUp(100, 20); // Pick up the Flashlight which will move to the base of the arm
accessoryDown(); // Reposition the arm for the tree branch
accessoryUp(33); // Get it to the right height
driveForward(0.5);
pointTurnCounterClockwise(60,60); // Need to turn a total of 130 degrees CounterClockwise
wait(.5);
accessoryDown(5); // Reposition the arm for the tree branch
pointTurnClockwise(40,60); // Using several short turns to do it
wait(.5);
pointTurnCounterClockwise(110,60);
backIntoWall();
accessoryUp(70);
driveForward(12);
driveBackward(1);
pointTurnCounterClockwise(50);
accessoryDown();
pointTurnClockwise(60,70);
accessoryUp(60);
driveForward(8);
pointTurnCounterClockwise(90);
backIntoWall(); // Align with the West wall
driveForward(3);
stopOnLine();
driveBackward(2);
pointTurnCounterClockwise(89);
accessoryDown();
driveForward(3);
gradualTurnCounterClockwise(12,25);
accessoryUp(90);
driveBackward(10);
pointTurnClockwise(10);
driveBackward();
backIntoWall();
wait(40);
}
Main
task main() {
startup();
setPowerLevel(30);
configureRobotDimensions(95, 32, (float) ((float)24/(float)40), BACKWARD, BACKWARD);
menu[lastMenuItem] = addMenuItem("Calibrate Light", FUNCTION_1);
menu[lastMenuItem] = addMenuItem("90 Degree Test", FUNCTION_2);
menu[lastMenuItem] = addMenuItem("Cargo Plane", FUNCTION_3);
menu[lastMenuItem] = addMenuItem("GreenMan House", FUNCTION_4);
menu[lastMenuItem] = addMenuItem("Get Gas Can", FUNCTION_5);
menu[lastMenuItem] = addMenuItem("EarthQuake", FUNCTION_6);
menu[lastMenuItem] = addMenuItem("Battery", FUNCTION_7);
menu[lastMenuItem] = addMenuItem("Dog Cat Tree", FUNCTION_8);
menu[lastMenuItem] = addMenuItem("Man House", FUNCTION_9);
int selectedItem;
bool proceedFromBase = true;
showMenu();
selectedItem = startMenu(3);
clearDisplay();
display(1, menu_prompts[selectedItem]);
string str = "";
StringFormat(str, "Test: %3d ", menu[selectedItem]);
display(2, str);
switch (menu[selectedItem])
{
case FUNCTION_1: calibrate(); break;
case FUNCTION_2: ninetyDegreeTest(); break;
case FUNCTION_3: if(proceedFromBase) { baseToCargoPlane(); proceedFromBase=false; } releaseCargoPlane();
case FUNCTION_4: if(proceedFromBase) { baseToGreenMan(); proceedFromBase=false; } getGreenManAndHouse();
case FUNCTION_5: if(proceedFromBase) { baseToGasCan(); proceedFromBase=false; } getGasCan();
case FUNCTION_6: if(proceedFromBase) { baseToEarthquake(); proceedFromBase=false; } getEarthquake();
case FUNCTION_7: if(proceedFromBase) { baseToBattery(); proceedFromBase=false; } getBattery();
case FUNCTION_8: getDogCat();
case FUNCTION_9: getFlashlightHouse();
}
return;
}