#include "main.h" ///// // For installation, upgrading, documentations and tutorials, check out our website! // https://ez-robotics.github.io/EZ-Template/ ///// // These are out of 127 const int DRIVE_SPEED = 110; const int TURN_SPEED = 90; const int SWING_SPEED = 90; /// // Constants /// void default_constants() { chassis.pid_heading_constants_set(3, 0, 20); chassis.pid_drive_constants_set(10, 0, 100); chassis.pid_turn_constants_set(3, 0, 20); chassis.pid_swing_constants_set(5, 0, 30); chassis.pid_turn_exit_condition_set(300_ms, 3_deg, 500_ms, 7_deg, 750_ms, 750_ms); chassis.pid_swing_exit_condition_set(300_ms, 3_deg, 500_ms, 7_deg, 750_ms, 750_ms); chassis.pid_drive_exit_condition_set(300_ms, 1_in, 500_ms, 3_in, 750_ms, 750_ms); chassis.slew_drive_constants_set(7_in, 80); } /// // Drive Example /// void drive_example() { // The first parameter is target inches // The second parameter is max speed the robot will drive at // The third parameter is a boolean (true or false) for enabling/disabling a slew at the start of drive motions // for slew, only enable it when the drive distance is greater then the slew distance + a few inches chassis.pid_drive_set(24_in, DRIVE_SPEED, true); chassis.pid_wait(); chassis.pid_drive_set(-12_in, DRIVE_SPEED); chassis.pid_wait(); chassis.pid_drive_set(-12_in, DRIVE_SPEED); chassis.pid_wait(); } /// // Turn Example /// void turn_example() { // The first parameter is target degrees // The second parameter is max speed the robot will drive at chassis.pid_turn_set(90_deg, TURN_SPEED); chassis.pid_wait(); chassis.pid_turn_set(45_deg, TURN_SPEED); chassis.pid_wait(); chassis.pid_turn_set(0_deg, TURN_SPEED); chassis.pid_wait(); } /// // Combining Turn + Drive /// void drive_and_turn() { chassis.pid_drive_set(24_in, DRIVE_SPEED, true); chassis.pid_wait(); chassis.pid_turn_set(45_deg, TURN_SPEED); chassis.pid_wait(); chassis.pid_turn_set(-45_deg, TURN_SPEED); chassis.pid_wait(); chassis.pid_turn_set(0_deg, TURN_SPEED); chassis.pid_wait(); chassis.pid_drive_set(-24_in, DRIVE_SPEED, true); chassis.pid_wait(); } /// // Wait Until and Changing Max Speed /// void wait_until_change_speed() { // pid_wait_until will wait until the robot gets to a desired position // When the robot gets to 6 inches, the robot will travel the remaining distance at a max speed of 30 chassis.pid_drive_set(24_in, DRIVE_SPEED, true); chassis.pid_wait_until(6_in); chassis.pid_speed_max_set(30); // After driving 6 inches at DRIVE_SPEED, the robot will go the remaining distance at 30 speed chassis.pid_wait(); chassis.pid_turn_set(45_deg, TURN_SPEED); chassis.pid_wait(); chassis.pid_turn_set(-45_deg, TURN_SPEED); chassis.pid_wait(); chassis.pid_turn_set(0_deg, TURN_SPEED); chassis.pid_wait(); // When the robot gets to -6 inches, the robot will travel the remaining distance at a max speed of 30 chassis.pid_drive_set(-24_in, DRIVE_SPEED, true); chassis.pid_wait_until(-6_in); chassis.pid_speed_max_set(30); // After driving 6 inches at DRIVE_SPEED, the robot will go the remaining distance at 30 speed chassis.pid_wait(); } /// // Swing Example /// void swing_example() { // The first parameter is ez::LEFT_SWING or ez::RIGHT_SWING // The second parameter is target degrees // The third parameter is speed of the moving side of the drive // The fourth parameter is the speed of the still side of the drive, this allows for wider arcs chassis.pid_swing_set(ez::LEFT_SWING, 45_deg, SWING_SPEED, 45); chassis.pid_wait(); chassis.pid_swing_set(ez::RIGHT_SWING, 0_deg, SWING_SPEED, 45); chassis.pid_wait(); chassis.pid_swing_set(ez::RIGHT_SWING, 45_deg, SWING_SPEED, 45); chassis.pid_wait(); chassis.pid_swing_set(ez::LEFT_SWING, 0_deg, SWING_SPEED, 45); chassis.pid_wait(); } /// // Auto that tests everything /// void combining_movements() { chassis.pid_drive_set(24_in, DRIVE_SPEED, true); chassis.pid_wait(); chassis.pid_turn_set(45_deg, TURN_SPEED); chassis.pid_wait(); chassis.pid_swing_set(ez::RIGHT_SWING, -45_deg, SWING_SPEED, 45); chassis.pid_wait(); chassis.pid_turn_set(0_deg, TURN_SPEED); chassis.pid_wait(); chassis.pid_drive_set(-24_in, DRIVE_SPEED, true); chassis.pid_wait(); } /// // Interference example /// void tug(int attempts) { for (int i = 0; i < attempts - 1; i++) { // Attempt to drive backwards printf("i - %i", i); chassis.pid_drive_set(-12_in, 127); chassis.pid_wait(); // If failsafed... if (chassis.interfered) { chassis.drive_sensor_reset(); chassis.pid_drive_set(-2_in, 20); pros::delay(1000); } // If robot successfully drove back, return else { return; } } } // If there is no interference, robot will drive forward and turn 90 degrees. // If interfered, robot will drive forward and then attempt to drive backwards. void interfered_example() { chassis.pid_drive_set(24_in, DRIVE_SPEED, true); chassis.pid_wait(); if (chassis.interfered) { tug(3); return; } chassis.pid_turn_set(90_deg, TURN_SPEED); chassis.pid_wait(); } // . . . // Make your own autonomous functions here! // . . .