1516X High Stakes 2.0
Codebase for 1516X High Stakes season
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include "main.h"
2#include "electronic/controller.h"
3#include "electronic/distance.h"
4#include "globals.h"
5#include "lemlib/chassis/chassis.hpp"
6#include "liblvgl/llemu.hpp"
7#include "pros/misc.h"
8#include "lemlib/timer.hpp"
9#include "pros/misc.hpp"
10#include "pros/motors.hpp"
11#include "pros/rtos.hpp"
12#include "robot/auton.h"
13#include "robot/drivetrain.h"
14#include "robot/ladybrown.h"
15#include "screen/selector.h"
16#include "screen/status.h"
17#include <string>
18#include <cmath>
19
20using namespace Robot;
21using namespace Robot::Globals;
22/*
23 ____ .____________ ____________ ___
24/_ || ____/_ |/ _____/\ \/ /
25 | ||____ \ | / __ \ \ /
26 | |/ \| \ |__\ \ / \
27 |___/______ /|___|\_____ //___/\ \
28 \/ \/ \_/
29
30*/
31
36
48
50 Robot::selector_screen selector;
51 Robot::status_screen status;
53
55 Robot::Controller controllers;
56 Robot::DistanceSensor distance_sensor;
58
65
66void initialize() {
67 chassis.calibrate();
68
69 chassis.setPose(0, 0, 0);
70 pros::rtos::Task MotorNotification(electronic.controllers.notify_motor_disconnect);
71
72 pros::lcd::initialize();
73 pros::Task screen_task([&]() {
74 while (true) {
75 // print robot location to the brain screen
76 pros::lcd::print(0, "X: %f", chassis.getPose().x); // x
77 pros::lcd::print(1, "Y: %f", chassis.getPose().y); // y
78 pros::lcd::print(2, "Theta: %f", chassis.getPose().theta); // heading
79 // delay to save resources
80 pros::lcd::print(3, "Lateral Sensor: %i", lateral_sensor.get_position());
81 pros::lcd::print(4, "Horizontal Sensor: %i", horizontal_sensor.get_position());
82 pros::lcd::print(5, "Lady Brown Sensor: %i", HookMotor.get_voltage());
83 pros::lcd::print(6, "Autonomous: %s", subsystem.autonomous.autonName);
84 pros::lcd::print(7, "Distance Position: %i", HookRotation.get_position());
85
86 double total_wattage = LeftBack.get_power() + RightBack.get_power() + LeftFront.get_power() +
87 RightFront.get_power() + LeftMid.get_power() + RightMid.get_power() +
88 IntakeMotor.get_power() + HookMotor.get_power() + LadyBrownMotor.get_power();
89
90 //std::cout << "Total Wattage: " << total_wattage << std::endl;
91 //std::cout << chassis.getPose().theta << std::endl;
92 //std::cout << chassis.getPose().x << ", " << chassis.getPose().y << std::endl;
93
94 pros::delay(100);
95 }
96 });
97
98 //@TODO: Put the following into a seperate class.
99 // pros::Task screen_task([&]() {
100 // lv_obj_t *chart = lv_chart_create(lv_scr_act());
101 // lv_chart_set_type(chart, LV_CHART_TYPE_LINE);
102 // lv_chart_set_point_count(chart, 460);
103 // lv_obj_set_size(chart, 460, 220);
104 // lv_obj_center(chart);
105 // lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_Y, -15250, -14750);
106 // lv_chart_set_zoom_y(chart, 600);
107 // lv_chart_set_zoom_x(chart, 1000);
108 // lv_obj_set_style_size(chart, 0, LV_PART_INDICATOR);
109 // lv_chart_series_t *s1 = lv_chart_add_series(chart, lv_color_white(), LV_CHART_AXIS_PRIMARY_Y);
110 // lv_chart_series_t *s2 = lv_chart_add_series(chart, lv_color_hex(0xFFFF0000), LV_CHART_AXIS_SECONDARY_X);
111
112 // lv_obj_t * label = lv_label_create(lv_scr_act());
113 // lv_obj_set_style_text_color(lv_scr_act(), lv_color_hex(0xffffff), LV_PART_MAIN);
114 // lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 0);
115 // lv_obj_set_style_text_font(label, &lv_font_montserrat_20, 0);
116
117 // while (true) {
118 // lv_chart_set_next_value(chart, s1, subsystem.ladybrown.get_target());
119 // lv_chart_set_next_value(chart, s2, LadyBrownRotation.get_position());
120 // if (pros::millis() >= 5000) {
121 // std::string angle = std::to_string(LadyBrownRotation.get_position());
122 // lv_label_set_text(label, angle.c_str());
123 // break;
124 // }
125 // pros::delay(10);
126 // }
127 // });
128
129 pros::rtos::Task Task(electronic.controllers.notify_motor_disconnect);
130}
131
137
138void disabled() {}
139
150 //screen.selector.selector();
151
152}
153
165
168 subsystem.autonomous.AutoDrive(subsystem.intake, subsystem.latch, subsystem.sweeper, electronic.distance_sensor,
169 subsystem.ladybrown);
170
171 // chassis.setPose(0, 0, 0);
172 // chassis.moveToPoint(0, -3.5, 1000, {.forwards = false});
173
174
175}
176
189void opcontrol() {
190
191 while (true) {
192
193 // Toggles the drivetrain orientation - can be forward or backward
194 if (controller.get_digital_new_press(pros::E_CONTROLLER_DIGITAL_LEFT)) {
195 std::string name = subsystem.drivetrain.toggleDrive();
196 // Output the current drive mode to the controller screen
197 controller.print(0, 0, name.c_str());
198 }
199
200 if (controller.get_digital_new_press(pros::E_CONTROLLER_DIGITAL_X)) {
201 pros::Task move([&]() { subsystem.ladybrown.MoveToPoint(LadyBrown::ATTACK_STATE); }, "LadyBrownMove");
202 }
203
204
205
206 subsystem.drivetrain.run();
207 subsystem.latch.run();
208 subsystem.sweeper.run();
209 subsystem.ladybrown.run();
210
211 // Intake controller - uses R1 to pull in and L1 to push out, and stops if nothing pressed
212 subsystem.intake.run();
213
214 // Handles partner controller keypresses to rumble the primary controller
215 electronic.controllers.notifier();
216
217 // DOES NOT SWITCH CONTROL - Checks for a key press to trigger controller switch
218 electronic.controllers.switchControl();
219
220 pros::delay(10); // Small delay to reduce CPU usage
221 }
222}
The Autonomous class contains classes and functions related to the robot's autonomous behavior.
Definition auton.h:16
static AUTON_ROUTINE auton
Sets the number of the autonomous program to use.
Definition auton.h:28
Represents the drivetrain of the robot.
Definition drivetrain.h:26
The Intake class represents a robot intake system.
Definition intake.h:8
The LadyBrown class represents the robot lady brown subsystem.
Definition ladybrown.h:9
The Latch class represents a latching mechanism.
Definition latch.h:8
The Latch class represents a latching mechanism.
Definition sweeper.h:8
Contains the declaration of the Drivetrain class.
void initialize()
Definition main.cpp:66
struct RobotSubsystems subsystem
void autonomous()
Definition main.cpp:166
void disabled()
Definition main.cpp:138
void competition_initialize()
Definition main.cpp:149
struct Electronics electronic
struct RobotScreen screen
void opcontrol()
Definition main.cpp:189
pros::Rotation HookRotation(2)
pros::Motor RightMid(-15, pros::v5::MotorGears::blue, pros::v5::MotorUnits::degrees)
pros::Motor IntakeMotor(-4, pros::v5::MotorGears::blue, pros::v5::MotorUnits::degrees)
lemlib::TrackingWheel horizontal_tracking_wheel & horizontal_sensor
Definition globals.cpp:71
pros::Motor LadyBrownMotor(-10, pros::v5::MotorGears::green, pros::v5::MotorUnits::degrees)
pros::Motor RightFront(16, pros::v5::MotorGears::blue, pros::v5::MotorUnits::degrees)
lemlib::Chassis chassis(drivetrain, lateral_controller, angular_controller, sensors, &throttle_curve, &steer_curve)
pros::Motor RightBack(14, pros::v5::MotorGears::blue, pros::v5::MotorUnits::degrees)
pros::Motor HookMotor(3, pros::v5::MotorGears::green, pros::v5::MotorUnits::degrees)
pros::Motor LeftBack(-11, pros::v5::MotorGears::blue, pros::v5::MotorUnits::degrees)
pros::Motor LeftFront(-13, pros::v5::MotorGears::blue, pros::v5::MotorUnits::degrees)
lemlib::TrackingWheel vertical_tracking_wheel & lateral_sensor
Definition globals.cpp:72
pros::Controller controller(pros::E_CONTROLLER_MASTER)
pros::Motor LeftMid(12, pros::v5::MotorGears::blue, pros::v5::MotorUnits::degrees)
Definition auton.h:10
Robot::Controller controllers
Definition main.cpp:55
Robot::DistanceSensor distance_sensor
Definition main.cpp:56
Robot::status_screen status
Definition main.cpp:51
Robot::selector_screen selector
Definition main.cpp:50
Structure that holds instances of all robot subsystems.
Definition main.cpp:40
Robot::Intake intake
Definition main.cpp:43
Robot::Autonomous autonomous
Definition main.cpp:41
Robot::Sweeper sweeper
Definition main.cpp:46
Robot::Drivetrain drivetrain
Definition main.cpp:42
Robot::Latch latch
Definition main.cpp:44
Robot::LadyBrown ladybrown
Definition main.cpp:45