4#include "lemlib/api.hpp"
5#include "lemlib/util.hpp"
6#include "pros/motors.h"
7#include "pros/rtos.hpp"
15 topMotor.set_brake_mode(pros::E_MOTOR_BRAKE_HOLD);
46 std::cout <<
"Color Rejected" << std::endl;
51 std::cout <<
"Color Accepted" << std::endl;
137 u_int32_t startTime = pros::millis();
145 while(pros::millis() - startTime < time)
176 if(!trapDoor_commanded)
178 topMotor.set_brake_mode(pros::E_MOTOR_BRAKE_COAST);
192 uint32_t startTime = pros::millis();
193 double initialHeading =
chassis.getPose().theta;
194 double targetHeading = std::round(initialHeading / 90.0) * 90.0;
197 while ((pros::millis() - startTime) < time) {
212 chassis.turnToHeading(targetHeading, 800);
217void relativeMotion(
float expected_x,
float expected_y,
float expected_theta,
float distance,
int timeout_ms,
bool forw =
true,
float earlyExit = 0)
219 lemlib::Pose targetPose(
220 expected_x + distance * std::sin(lemlib::degToRad(expected_theta)),
221 expected_y + distance * std::cos(lemlib::degToRad(expected_theta)),
225 chassis.moveToPoint(targetPose.x, targetPose.y, timeout_ms, {.forwards = forw, .earlyExitRange = earlyExit});
230 pros::Task counter_task([=]() {
232 uint32_t start_time = pros::millis();
233 while(pros::millis() - start_time < time_ms && count < balls)
235 start_time = pros::millis();
240 pros::Task::delay_until(&start_time, 10);
243 pros::Task::current().remove();
260 double currentTheta =
chassis.getPose().theta;
261 double error = std::remainder(targetAngle - currentTheta, 360.0);
262 if (std::abs(error) > 5.0) {
263 std::cout <<
"Error big enough to activate alignment " << error << std::endl;
271 pros::delay(std::clamp((
int)error * 100, 300, 1000));
277 pros::Task::current().remove();
285 if (d1 > 1800 || d2 > 1800)
return -1;
286 double wallAngleDeg = atan2((d1 - d2) * 0.0393701, 10.75) * 180.0 / M_PI;
288 if ((robotHeading >= 315 && robotHeading < 360) || (robotHeading >= 0 && robotHeading < 45)) {
291 else if (robotHeading >= 45 && robotHeading < 135) {
292 return 90 + wallAngleDeg;
294 else if (robotHeading >= 135 && robotHeading < 225) {
295 return 180 + wallAngleDeg;
297 else if (robotHeading >= 225 && robotHeading < 315) {
298 return 270 + wallAngleDeg;
void score_midgoal_auton(int power=12000, Color allianceColor=Color::RED, int time=-1)
void outtake(int power=12000)
void alignToGoal(double targetAngle)
void intake(int power=12000)
void score_longgoal_auton(int power=12000, Color allianceColor=Color::RED, int time=-1)
void matchload_wiggle(int time=1000, int speed=100)
double calculateAngle(double robotHeading)
void score_longgoal(int power=12000, Color allianceColor=Color::RED)
void matchload_state(bool state)
void score_midgoal(int power=12000)
void relativeMotion(float expected_x, float expected_y, float expected_theta, float distance, int timeout_ms, bool forw=true, float earlyExit=0)
void score_bottomgoal(int power=12000)
void matchload_counter(int balls, int time_ms)
void resting_state(bool trapDoor_commanded=false)
pros::adi::Pneumatics blockBlocker('G', false)
pros::Distance frontDistance(14)
pros::adi::Pneumatics scoringBand('C', false)
pros::adi::Pneumatics trapDoor('A', false)
pros::Motor intakeMotor(18, pros::v5::MotorGears::blue)
pros::Motor topMotor(19, pros::v5::MotorGears::blue)
pros::adi::Pneumatics matchload('E', false)
pros::adi::Pneumatics intakeFunnel('B', true)
pros::Distance frontDistance2(17)
pros::MotorGroup rightMotors
pros::MotorGroup leftMotors