steak/src/main.cpp
2024-10-24 08:24:30 -04:00

133 lines
5.2 KiB
C++

#include "main.h"
using namespace ez;
Drive chassis(
{-11, -18, 20}, // Left motor ports.
{1,8 ,-10}, // Right motor ports.
7, // IMU port.
3.25, // Wheel size.
600, // Ticks per rotation of encoder.
1.6667 // External ratio.
// TODO: Add tracking wheel ports.
);
/*
Runs initialization code. This occurs as soon as the program is started.
All other competition modes are blocked by initialize; it is recommended to
keep execution time for this mode under a few seconds.
*/
void initialize() {
pros::delay(500); // Stop the user from doing anything while legacy ports
// configure.
chassis.opcontrol_curve_buttons_toggle(true); // Enables modifying the
// controller curve with
// buttons on the joysticks.
chassis.opcontrol_drive_activebrake_set(0); // Sets the active brake kP. We
// recommend 2.
chassis.opcontrol_curve_default_set(0, 0); // Defaults for curve. If using
// tank, only the first
// parameter is used. (Comment
// this line out if you have an
// SD card!).
default_constants(); // Set the drive to your own constants from autons.cpp!
#if 0
as::auton_selector.autons_add({
Auton("Example Drive\n\nDrive forward and come back.", drive_example),
Auton("Example Turn\n\nTurn 3 times.", turn_example),
Auton("Drive and Turn\n\nDrive forward, turn, come back. ", drive_and_turn),
Auton("Drive and Turn\n\nSlow down during drive.", wait_until_change_speed),
Auton("Swing Example\n\nSwing in an 'S' curve", swing_example),
Auton("Combine all 3 movements", combining_movements),
Auton("Interference\n\nAfter driving forward, robot performs differently if interfered or not.", interfered_example),
});
#endif
chassis.initialize();
as::initialize();
master.rumble(".");
}
/*
Runs while the robot is in the disabled state of Field Management System or
the VEX Competition Switch, following either autonomous or opcontrol. When
the robot is enabled, this task will exit.
*/
void disabled() { }
/*
Runs after initialize(), and before autonomous when connected to the Field
Management System or the VEX Competition Switch. This is intended for
competition-specific initialization routines, such as an autonomous
selector on the LCD.
This task will exit when the robot is enabled and autonomous or opcontrol
starts.
*/
void competition_initialize() { }
/*
Runs the user autonomous code. This function will be started in its own
task with the default priority and stack size whenever the robot is enabled
via the Field Management System or the VEX Competition Switch in the
autonomous mode. Alternatively, this function may be called in initialize
or opcontrol for non-competition testing purposes.
If the robot is disabled or communications is lost, the autonomous task
will be stopped. Re-enabling the robot will restart the task, not re-start
it from where it left off.
*/
void autonomous() {
chassis.pid_targets_reset(); // Resets PID targets to 0.
chassis.drive_imu_reset(); // Reset gyro position to 0.
chassis.drive_sensor_reset(); // Reset drive sensors to 0.
chassis.drive_brake_set(MOTOR_BRAKE_HOLD); // Set motors to hold. This
// helps autonomous consistency.
int dist = 48;
chassis.pid_drive_set(dist, 127, true);
chassis.pid_wait_until(dist - 5);
int dist2 = -(dist-6);
chassis.pid_drive_set(dist2, 127, true);
chassis.pid_wait_until(dist2 + 5);
}
/*
Runs the operator control code. This function will be started in its own
task with the default priority and stack size whenever the robot is enabled
via the Field Management System or the VEX Competition Switch in the
operator control mode.
If no competition control is connected, this function will run immediately
following initialize().
If the robot is disabled or communications is lost, the operator control
task will be stopped. Re-enabling the robot will restart the task, not
resume it from where it left off.
*/
void opcontrol() {
chassis.drive_brake_set(MOTOR_BRAKE_COAST);
//swing_example();
while (true) {
if (!pros::competition::is_connected()) {
if (master.get_digital_new_press(DIGITAL_X))
chassis.pid_tuner_toggle();
if (master.get_digital_new_press(DIGITAL_B))
autonomous();
chassis.pid_tuner_iterate(); // Allow PID Tuner to iterate.
}
chassis.opcontrol_arcade_standard(SPLIT); // Tank control.
pros::delay(util::DELAY_TIME); // This is used for timer calculations!
// Keep this util::DELAY_TIME.
}
}