RoboCatz.com

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;

}