1516X Push Back 1.0
1516X's robot code for the 2025-2026 VEX Robotics Competition
Loading...
Searching...
No Matches
autonFunctions.cpp
Go to the documentation of this file.
1#include "main.h"
2#include "globals.h"
3#include "pros/misc.h"
4#include "lemlib/api.hpp"
5#include "lemlib/util.hpp"
6#include "pros/motors.h"
7#include "pros/rtos.hpp"
8#include <cmath>
9#include "colorSort.h"
10
11void intake(int power = 12000)
12{
13 intakeFunnel.extend();
14 intakeMotor.move_voltage(power);
15 topMotor.set_brake_mode(pros::E_MOTOR_BRAKE_HOLD);
16 topMotor.brake();
17}
18
19void outtake(int power = 12000)
20{
21 if(intakeFunnel.is_extended())
22 {
23 intakeFunnel.retract();
24 pros::delay(100);
25 intakeMotor.move_voltage(12000);
26 pros::delay(300);
27 }
28 topMotor.move_voltage(-12000);
29 if(low_ramp_down_time >= 1000)
30 intakeMotor.move_voltage( -12000);
31 else
32 intakeMotor.move_voltage(-power);
33}
34
35void score_bottomgoal(int power = 12000)
36{
37 intakeMotor.move_voltage(-power);
38}
39
40void score_longgoal(int power = 12000, Color allianceColor = Color::RED)
41{
42 intake(power);
43 if(get_color() != allianceColor && get_color() != Color::NONE && color_sort_enable)
44 {
45 topMotor.move_voltage(-8000);
46 std::cout << "Color Rejected" << std::endl;
47 }
48 else
49 {
50 topMotor.move_voltage(power);
51 std::cout << "Color Accepted" << std::endl;
52 }
53
54}
55
57{
58 intakeMotor.move_voltage(0);
59 topMotor.move_voltage(0);
60}
61
62void score_midgoal(int power = 12000)
63{
65 {
67 {
68 midgoal_first = false;
69 trapDoor.extend();
70 intakeMotor.move_voltage(12000);
71 topMotor.move_voltage(6000);
72 }
74 {
75 midgoal_first = false;
76 trapDoor.extend();
77 intakeMotor.move_voltage(12000);
78 topMotor.move_voltage(6000);
79 }
80 }
81 if(get_color() != allianceColor && get_color() != Color::NONE && color_sort_enable)
82 {
83 topMotor.move_voltage(-8000);
84 }
85 else {
86 if (ramp_up_time >= 1200)
87 {
88 topMotor.move_voltage(8000);
89 intakeMotor.move_voltage(12000);
90 }
91 if (ramp_up_time >= 800)
92 {
93 topMotor.move_voltage(5000); // Prev: 4000
94 intakeMotor.move_voltage(12000);
95 }
96 else if(ramp_up_time >= 400)
97 {
98 topMotor.move_voltage(6000);
99 intakeMotor.move_voltage(12000);
100 }
101 else {
102 topMotor.move_voltage(10000);
103 intakeMotor.move_voltage(12000);
104 }
105 }
106 //if (ramp_up_time >= 1600)
107 //{
108 // topMotor.move_voltage(4000);
109 //}
110 //topMotor.move_voltage(10000);
111
112}
113
114void score_midgoal_auton(int power = 12000, Color allianceColor = Color::RED, int time = -1)
115{
116 intake(12000);
117 chassis.tank(-35, -35);
118 topMotor.move_velocity(330);
119 pros::delay(250);
120 topMotor.move_velocity(300);
121 pros::delay(400);
122 topMotor.move_velocity(300);
123 pros::delay(400);
124 topMotor.move_velocity(270);
125 pros::delay(550);
126 topMotor.move_velocity(270);
127 pros::delay(400);
128 topMotor.move_velocity(240);
129 pros::delay(1400);
130
131}
132
133void score_longgoal_auton(int power = 12000, Color allianceColor = Color::RED, int time = -1)
134{
135 leftMotors.move(-50);
136 rightMotors.move(-50);
137 u_int32_t startTime = pros::millis();
139 {
140 blockBlocker.extend();
141 scoringBand.extend();
142 }
143 if(time != -1)
144 {
145 while(pros::millis() - startTime < time)
146 {
147 if(get_color() != allianceColor && get_color() != Color::NONE && color_sort_enable)
148 {
149 topMotor.move_voltage(-10000);
150 intakeMotor.move_voltage(12000);
151 }
152 else
153 {
154 topMotor.move_voltage(power);
155 intakeMotor.move_voltage(power);
156 }
157 }
158 }
159 intake_stop();
160 chassis.tank(0,0);
161 if(blockBlocker.is_extended()) blockBlocker.retract();
162 if(scoringBand.is_extended()) scoringBand.retract();
163}
164
165
166
168{
169 intake();
170 topMotor.move_voltage(-8000);
171}
172
173void resting_state(bool trapDoor_commanded = false)
174{
175 intake_stop();
176 if(!trapDoor_commanded)
177 trapDoor.retract();
178 topMotor.set_brake_mode(pros::E_MOTOR_BRAKE_COAST);
179}
180
181void matchload_state(bool state)
182{
183 if(state)
184 matchload.extend();
185 else if(!state)
186 matchload.retract();
187}
188
189
190void matchload_wiggle(int time = 1000, int speed = 100)
191{
192 uint32_t startTime = pros::millis();
193 double initialHeading = chassis.getPose().theta;
194 double targetHeading = std::round(initialHeading / 90.0) * 90.0;
195 bool flip = false;
196
197 while ((pros::millis() - startTime) < time) {
198 if (flip) {
199 leftMotors.move(-speed);
200 rightMotors.move(speed);
201 } else {
202 leftMotors.move(speed);
203 rightMotors.move(-speed);
204 }
205 flip = !flip;
206 pros::delay(100);
207 }
208
209 leftMotors.brake();
210 rightMotors.brake();
211 pros::delay(50);
212 chassis.turnToHeading(targetHeading, 800);
213}
214
215
216
217void relativeMotion(float expected_x, float expected_y, float expected_theta, float distance, int timeout_ms, bool forw = true, float earlyExit = 0)
218{
219 lemlib::Pose targetPose(
220 expected_x + distance * std::sin(lemlib::degToRad(expected_theta)),
221 expected_y + distance * std::cos(lemlib::degToRad(expected_theta)),
222 expected_theta
223 );
224
225 chassis.moveToPoint(targetPose.x, targetPose.y, timeout_ms, {.forwards = forw, .earlyExitRange = earlyExit});
226}
227
228void matchload_counter(int balls, int time_ms)
229{
230 pros::Task counter_task([=]() {
231 int count = 0;
232 uint32_t start_time = pros::millis();
233 while(pros::millis() - start_time < time_ms && count < balls)
234 {
235 start_time = pros::millis();
236 if(frontDistance.get_object_size() <= 70)
237 {
238 count++;
239 }
240 pros::Task::delay_until(&start_time, 10);
241 }
242 intake_stop();
243 pros::Task::current().remove();
244 });
245}
246/*
247void score_from_basket()
248{
249 color_sort_enable = false;
250 topMotor.move(12000);
251 intakeMotor.move(-12000);
252}
253*/
254
255
256void alignToGoal(double targetAngle) {
257
258 pros::Task([=]() {
259
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;
264 if (error > 0) {
265 leftMotors.move(-100);
266 rightMotors.move(0);
267 } else {
268 leftMotors.move(0);
269 rightMotors.move(-100);
270 }
271 pros::delay(std::clamp((int)error * 100, 300, 1000));
272 }
273
274 leftMotors.brake();
275 rightMotors.brake();
276 chassis.tank(0,0);
277 pros::Task::current().remove();
278 });
279}
280
281double calculateAngle(double robotHeading) {
282 double d1 = frontDistance.get();
283 double d2 = frontDistance2.get() + 10;
284
285 if (d1 > 1800 || d2 > 1800) return -1;
286 double wallAngleDeg = atan2((d1 - d2) * 0.0393701, 10.75) * 180.0 / M_PI;
287
288 if ((robotHeading >= 315 && robotHeading < 360) || (robotHeading >= 0 && robotHeading < 45)) {
289 return wallAngleDeg;
290 }
291 else if (robotHeading >= 45 && robotHeading < 135) {
292 return 90 + wallAngleDeg;
293 }
294 else if (robotHeading >= 135 && robotHeading < 225) {
295 return 180 + wallAngleDeg;
296 }
297 else if (robotHeading >= 225 && robotHeading < 315) {
298 return 270 + wallAngleDeg;
299 }
300
301 return -1;
302}
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 intake_to_basket()
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 intake_stop()
void resting_state(bool trapDoor_commanded=false)
Color get_color()
Definition colorSort.cpp:5
pros::adi::Pneumatics blockBlocker('G', false)
int ramp_up_time
Definition globals.cpp:99
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)
bool color_sort_enable
Definition globals.cpp:97
pros::adi::Pneumatics matchload('E', false)
int low_ramp_down_time
Definition globals.cpp:100
Color allianceColor
Definition globals.cpp:96
pros::adi::Pneumatics intakeFunnel('B', true)
bool midgoal_first
Definition globals.cpp:98
pros::Distance frontDistance2(17)
pros::MotorGroup rightMotors
lemlib::Chassis chassis
pros::MotorGroup leftMotors
Definition globals.cpp:22