Compare commits

..
2 Commits
Author SHA1 Message Date
Carter c46a581eb1 Merge branch 'main' of http://100.75.58.78:3000/carter/VEX-OverRide 2026-09-05 19:02:37 -04:00
Carter 6d79b61626 Added a way to control the arm, lift, and wrist mechanisms.
Made the arm check the height of the lift and move to a different state based on the height of the lift
and made the wrist move a specific amount only when the arm passes a threshold.
Added new functions that allow me to quickly change the controller and buttons being used to control
different mechanisms.
Added a new function specificly for autonomouse which allows me to select the desired positon of every
mechanism.
Changed the name of almost every function and enumeration to better match the rest of the program.
2026-09-05 19:01:14 -04:00
6 changed files with 457 additions and 37 deletions

No files matched your search

@@ -1,33 +1,58 @@
#pragma once #pragma once
#include <vector>
#include "api.h" #include "api.h"
#include "pros/adi.hpp" #include "pros/adi.hpp"
#include "pros/rotation.hpp" #include "pros/rotation.hpp"
namespace ez{ namespace ez{
enum class ControlPeriod {
driver,
auton
};
enum class Controller {
master,
slave
};
enum class Buttons {
arrow_buttons,
Y_B_buttons,
left_shoulder_buttons,
right_shoulder_buttons
};
class ArmMech{ class ArmMech{
private: private:
std::vector<int> armStates; std::vector<int> levelOneArmStates;
int numArmStates; std::vector<int> levelTwoArmStates;
std::vector<int> levelThreeArmStates;
std::vector<int> levelFourArmStates;
int numArmStates = 2;
float armKP; float armKP;
public: public:
std::vector<int> selectedStates;
int targetPos;
int currArmState; int currArmState;
int armTarget; int armTarget;
float armError; float armError;
float armVelocity; float armVelocity;
ArmMech(); ArmMech();
ArmMech(std::initializer_list<int> armStates, int numArmStates);
void arm_driver_control(enum Controller, enum Buttons);
void arm_auton_control(int pickState);
void cycle_states(); void cycle_states();
void reset_state(); void reset_state();
void arm_control(); void arm_control();
void set_arm_kp(float _armKP);
void set_state_values(std::vector<int> _levelOneArmStates, std::vector<int> _levelTwoArmStates, std::vector<int> _levelThreeArmStates, std::vector<int> _levelFourArmStates);
int get_arm_state(); int get_arm_state();
int get_num_arm_states(); int get_num_arm_states();
int get_arm_kp(); float get_arm_kp();
}; };
class LiftMech { class LiftMech {
@@ -35,23 +60,34 @@ namespace ez{
std::vector<int> liftStates; std::vector<int> liftStates;
int numLiftStates; int numLiftStates;
float liftKP; float liftKP;
std::vector<int> firstRange;
std::vector<int> secondRange;
std::vector<int> thirdRange;
std::vector<int> fourthRange;
public: public:
int currLiftState; int currLiftState;
int liftTarget; int liftTarget;
int liftHeight;
float liftError; float liftError;
float liftVelocity; float liftVelocity;
LiftMech(); LiftMech();
LiftMech(std::initializer_list<int> liftStates, int numLiftStates); LiftMech(std::initializer_list<int> _liftStates, int _numLiftStates);
void lift_driver_control(enum Controller, enum Buttons);
void lift_auton_control(int pickState);
void cycle_states(); void cycle_states();
void reset_state(); void reset_state();
void lift_control(); void lift_control();
void lift_range_finder();
void set_lift_kp(float _liftKP);
void set_ranges(std::vector<int> _firstRange, std::vector<int> _secondRange, std::vector<int> _thirdRange, std::vector<int> _fourthRange);
int get_lift_state(); int get_lift_state();
int get_num_lift_states(); int get_num_lift_states();
int get_lift_kp(); float get_lift_kp();
}; };
class WristMech { class WristMech {
@@ -67,14 +103,18 @@ namespace ez{
float wristVelocity; float wristVelocity;
WristMech(); WristMech();
WristMech(std::initializer_list<int> wristStates, int numWristStates); WristMech(std::initializer_list<int> _wristStates, int _numWristStates);
void cycle_states(); void wrist_driver_control(enum Controller, enum Buttons);
void rotate_wrist(int wristThreshold);
void reset_state(); void reset_state();
void wrist_control(); void wrist_control();
int get_wrist_state(); int get_wrist_state();
int get_num_wrist_states(); int get_num_wrist_states();
int get_wrist_kp(); float get_wrist_kp();
void set_wrist_kp(float _wristKP);
}; };
}; };
+1 -1
View File
@@ -30,7 +30,7 @@ inline ez::Piston claw({'G',true});
*/ */
inline pros::Rotation liftRotation({15}); inline pros::Rotation liftRotation({15});
inline pros::Rotation armRotation({16}); inline pros::Rotation armRotation({16});
inline pros::Rotation wristRotatio({17}); inline pros::Rotation wristRotation({17});
inline pros::Optical colorSensorOne({18}); inline pros::Optical colorSensorOne({18});
inline pros::Optical colorSensorTwo({19}); inline pros::Optical colorSensorTwo({19});
@@ -3,27 +3,182 @@
using namespace ez; using namespace ez;
ArmMech::ArmMech() {} LiftMech liftObj;
ArmMech::ArmMech(std::initializer_list<int> _armStates, int _numArmStates) {
armStates = _armStates; ArmMech::ArmMech() {
numArmStates = _numArmStates;
currArmState = 0; currArmState = 0;
armTarget = 0; armTarget = 0;
armKP = 0.0173f; targetPos = 0;
set_arm_kp(0.0173f);
}
void ArmMech::arm_driver_control(Controller currController, Buttons buttonUsed) {
switch (currController)
{
case Controller::master:
switch (buttonUsed)
{
case Buttons::arrow_buttons:
if (master.get_digital_new_press(DIGITAL_RIGHT)){
arm.move(127);
}
else if (master.get_digital_new_press(DIGITAL_DOWN)) {
arm.move(-127);
}
break;
case Buttons::Y_B_buttons:
if (master.get_digital_new_press(DIGITAL_Y)){
arm.move(127);
}
else if (master.get_digital_new_press(DIGITAL_B)) {
arm.move(-127);
}
break;
case Buttons::left_shoulder_buttons:
if (master.get_digital_new_press(DIGITAL_L1)){
arm.move(127);
}
else if (master.get_digital_new_press(DIGITAL_L2)) {
arm.move(-127);
}
break;
case Buttons::right_shoulder_buttons:
if (master.get_digital_new_press(DIGITAL_R1)){
arm.move(127);
}
else if (master.get_digital_new_press(DIGITAL_R2)) {
arm.move(-127);
}
break;
default:
break;
}
break;
case Controller::slave:
switch (buttonUsed)
{
case Buttons::arrow_buttons:
if (slave.get_digital_new_press(DIGITAL_RIGHT)){
cycle_states();
}
else if (slave.get_digital_new_press(DIGITAL_DOWN)) {
reset_state();
}
break;
case Buttons::Y_B_buttons:
if (slave.get_digital_new_press(DIGITAL_Y)){
cycle_states();
}
else if (slave.get_digital_new_press(DIGITAL_B)) {
reset_state();
}
break;
case Buttons::left_shoulder_buttons:
if (slave.get_digital_new_press(DIGITAL_L1)){
cycle_states();
}
else if (slave.get_digital_new_press(DIGITAL_L2)) {
reset_state();
}
break;
case Buttons::right_shoulder_buttons:
if (slave.get_digital_new_press(DIGITAL_R1)){
cycle_states();
}
else if (slave.get_digital_new_press(DIGITAL_R2)) {
reset_state();
}
break;
default:
break;
}
break;
default:
break;
}
}
void ArmMech::arm_auton_control(int pickState) {
liftObj.lift_range_finder();
switch (targetPos)
{
case 0:
selectedStates = levelOneArmStates;
if (pickState == 1) {
selectedStates[1];
}
else {
selectedStates[0];
}
break;
case 1:
selectedStates = levelOneArmStates;
if (pickState == 1) {
selectedStates[1];
}
else {
selectedStates[0];
}
break;
case 2:
selectedStates = levelTwoArmStates;
if (pickState == 1) {
selectedStates[1];
}
else {
selectedStates[0];
}
break;
case 3:
selectedStates = levelThreeArmStates;
if (pickState == 1) {
selectedStates[1];
}
else {
selectedStates[0];
}
break;
default:
break;
}
} }
void ArmMech::cycle_states() { void ArmMech::cycle_states() {
liftObj.lift_range_finder();
switch (targetPos)
{
case 0:
selectedStates = levelOneArmStates;
break;
case 1:
selectedStates = levelTwoArmStates;
break;
case 2:
selectedStates = levelThreeArmStates;
break;
case 3:
selectedStates = levelFourArmStates;
break;
default:
break;
}
currArmState ++; currArmState ++;
if (currArmState == numArmStates) { if (currArmState == numArmStates) {
currArmState = 0; currArmState = 0;
} }
armTarget = armStates[currArmState]; armTarget = selectedStates[currArmState];
} }
void ArmMech::reset_state() { void ArmMech::reset_state() {
currArmState = 0; currArmState = 0;
armTarget = armStates[currArmState]; armTarget = selectedStates[currArmState];
} }
void ArmMech::arm_control() { void ArmMech::arm_control() {
@@ -32,6 +187,16 @@ void ArmMech::arm_control() {
arm.move(armVelocity); arm.move(armVelocity);
} }
int ArmMech::get_arm_state() {return armStates[currArmState];} void ArmMech::set_state_values(std::vector<int> _levelOneArmStates, std::vector<int> _levelTwoArmStates, std::vector<int> _levelThreeArmStates, std::vector<int> _levelFourArmStates) {
levelOneArmStates = _levelOneArmStates;
levelTwoArmStates = _levelTwoArmStates;
levelThreeArmStates = _levelThreeArmStates;
levelFourArmStates = _levelFourArmStates;
}
void ArmMech::set_arm_kp(float _armKP) {
armKP = _armKP;
}
int ArmMech::get_arm_state() {return selectedStates[currArmState];}
int ArmMech::get_num_arm_states() {return numArmStates;} int ArmMech::get_num_arm_states() {return numArmStates;}
int ArmMech::get_arm_kp() {return armKP;} float ArmMech::get_arm_kp() {return armKP;}
@@ -3,13 +3,124 @@
using namespace ez; using namespace ez;
ArmMech armObjRange;
LiftMech::LiftMech() {} LiftMech::LiftMech() {}
LiftMech::LiftMech(std::initializer_list<int> _liftStates, int _numLiftStates) { LiftMech::LiftMech(std::initializer_list<int> _liftStates, int _numLiftStates) {
liftStates = _liftStates; liftStates = _liftStates;
numLiftStates = _numLiftStates; numLiftStates = _numLiftStates;
currLiftState = 0; currLiftState = 0;
liftTarget = 0; liftTarget = 0;
liftKP = 0.0173f; set_lift_kp(0.0173f);
}
void LiftMech::lift_driver_control(Controller currController, Buttons buttonUsed) {
switch (currController)
{
case Controller::master:
switch (buttonUsed)
{
case Buttons::arrow_buttons:
if (master.get_digital(DIGITAL_RIGHT)) {
lift.move(127);
}
else if (master.get_digital(DIGITAL_DOWN)) {
lift.move(-127);
}
break;
case Buttons::Y_B_buttons:
if (master.get_digital(DIGITAL_Y)) {
lift.move(127);
}
else if (master.get_digital(DIGITAL_B)) {
lift.move(-127);
}
break;
case Buttons::left_shoulder_buttons:
if (master.get_digital(DIGITAL_L1)) {
lift.move(127);
}
else if (master.get_digital(DIGITAL_L2)) {
lift.move(-127);
}
break;
case Buttons::right_shoulder_buttons:
if (master.get_digital(DIGITAL_R1)) {
lift.move(127);
}
else if (master.get_digital(DIGITAL_R2)) {
lift.move(-127);
}
break;
default:
break;
}
break;
case Controller::slave:
switch (buttonUsed)
{
case Buttons::arrow_buttons:
if (slave.get_digital(DIGITAL_RIGHT)) {
cycle_states();
}
else if (slave.get_digital(DIGITAL_DOWN)) {
reset_state();
}
break;
case Buttons::Y_B_buttons:
if (slave.get_digital(DIGITAL_Y)) {
cycle_states();
}
else if (slave.get_digital(DIGITAL_B)) {
reset_state();
}
break;
case Buttons::left_shoulder_buttons:
if (slave.get_digital(DIGITAL_L1)) {
cycle_states();
}
else if (slave.get_digital(DIGITAL_L2)) {
reset_state();
}
break;
case Buttons::right_shoulder_buttons:
if (slave.get_digital(DIGITAL_R1)) {
cycle_states();
}
else if (slave.get_digital(DIGITAL_R2)) {
reset_state();
}
break;
default:
break;
}
break;
default:
break;
}
}
void LiftMech::lift_auton_control(int pickState) {
switch (pickState)
{
case 1:
liftTarget = liftStates[0];
break;
case 2:
liftTarget = liftStates[1];
break;
case 3:
liftTarget = liftStates[2];
break;
case 4:
liftTarget = liftStates[3];
break;
default:
liftTarget = liftStates[0];
break;
}
} }
void LiftMech::cycle_states() { void LiftMech::cycle_states() {
@@ -32,6 +143,34 @@ void LiftMech::lift_control() {
lift.move(liftVelocity); lift.move(liftVelocity);
} }
void LiftMech::lift_range_finder() {
liftHeight = liftRotation.get_position();
if (liftHeight >= firstRange[0] && liftHeight <= firstRange[1]) {
armObjRange.targetPos = 0;
}
else if (liftHeight >= secondRange[0] && liftHeight <= secondRange[1]) {
armObjRange.targetPos = 1;
}
else if (liftHeight >= thirdRange[0] && liftHeight <= thirdRange[1]) {
armObjRange.targetPos = 2;
}
else if (liftHeight >= fourthRange[0] && liftHeight <= fourthRange[1]) {
armObjRange.targetPos = 3;
}
}
void LiftMech::set_lift_kp(float _liftKp) {
liftKP = _liftKp;
}
void LiftMech::set_ranges(std::vector<int> _firstRange, std::vector<int> _secondRange, std::vector<int> _thirdRange, std::vector<int> _fourthRange) {
firstRange = _firstRange;
secondRange = _secondRange;
thirdRange = _thirdRange;
fourthRange = _fourthRange;
}
int LiftMech::get_lift_state() {return liftStates[currLiftState];} int LiftMech::get_lift_state() {return liftStates[currLiftState];}
int LiftMech::get_num_lift_states() {return numLiftStates;} int LiftMech::get_num_lift_states() {return numLiftStates;}
int LiftMech::get_lift_kp() {return liftKP;} float LiftMech::get_lift_kp() {return liftKP;}
@@ -9,16 +9,80 @@ WristMech::WristMech(std::initializer_list<int> _wristStates, int _numWristState
numWristStates = _numWristStates; numWristStates = _numWristStates;
currWristState = 0; currWristState = 0;
wristTarget = 0; wristTarget = 0;
wristKP = 0.0173f; set_wrist_kp(0.0173f);
} }
void WristMech::cycle_states() { void WristMech::wrist_driver_control(Controller currController, Buttons buttonUsed) {
currWristState ++; switch (currController)
{
case Controller::master:
if (currWristState == numWristStates) { switch (buttonUsed)
currWristState = 0; {
case Buttons::arrow_buttons:
if (master.get_digital(DIGITAL_DOWN)) {
reset_state();
}
break;
case Buttons::Y_B_buttons:
if (master.get_digital(DIGITAL_Y)) {
reset_state();
}
break;
case Buttons::left_shoulder_buttons:
if (master.get_digital(DIGITAL_L1)) {
reset_state();
}
break;
case Buttons::right_shoulder_buttons:
if (master.get_digital(DIGITAL_R1)) {
reset_state();
}
break;
default:
break;
}
break;
case Controller::slave:
switch (buttonUsed)
{
case Buttons::arrow_buttons:
if (slave.get_digital(DIGITAL_DOWN)) {
reset_state();
}
break;
case Buttons::Y_B_buttons:
if (slave.get_digital(DIGITAL_Y)) {
reset_state();
}
break;
case Buttons::left_shoulder_buttons:
if (slave.get_digital(DIGITAL_L1)) {
reset_state();
}
break;
case Buttons::right_shoulder_buttons:
if (slave.get_digital(DIGITAL_R1)) {
reset_state();
}
break;
default:
break;
}
break;
default:
break;
}
}
void WristMech::rotate_wrist(int wristThreshold) {
if (armRotation.get_position() > wristThreshold) {
wristTarget = wristStates[1];
}
else if (armRotation.get_position() < wristThreshold) {
wristTarget = wristStates[0];
} }
wristTarget = wristStates[currWristState];
} }
void WristMech::reset_state() { void WristMech::reset_state() {
@@ -34,4 +98,8 @@ void WristMech::wrist_control() {
int WristMech::get_wrist_state() {return wristStates[currWristState];} int WristMech::get_wrist_state() {return wristStates[currWristState];}
int WristMech::get_num_wrist_states() {return numWristStates;} int WristMech::get_num_wrist_states() {return numWristStates;}
int WristMech::get_wrist_kp() {return wristKP;} float WristMech::get_wrist_kp() {return wristKP;}
void WristMech::set_wrist_kp(float _wristKP) {
wristKP = _wristKP;
}
+15 -7
View File
@@ -25,18 +25,14 @@ ez::Drive chassis(
// ez::tracking_wheel vert_tracker(9, 2.75, 4.0); // This tracking wheel is parallel to the drive wheels // ez::tracking_wheel vert_tracker(9, 2.75, 4.0); // This tracking wheel is parallel to the drive wheels
// Arm constructor // Arm constructor
ArmMech armSetup( ArmMech armSetup();
{0, 300},
2);
// Lift constructor // Lift constructor
LiftMech liftSetup( LiftMech liftSetup(
{0, 100, 200}, {0, 100, 200, 300},
3); 4);
// Wrist constructor // Wrist constructor
WristMech wristSetup( WristMech wristSetup(
@@ -57,7 +53,12 @@ void initialize() {
pros::delay(500); // Stop the user from doing anything while legacy ports configure pros::delay(500); // Stop the user from doing anything while legacy ports configure
armObj.set_state_values({1, 2}, {1, 2}, {1, 2}, {1, 2});
armRotation.reset_position(); armRotation.reset_position();
liftRotation.reset_position();
wristRotation.reset_position();
pros::Task liftControlTasck([&]{ pros::Task liftControlTasck([&]{
while (true) { while (true) {
armObj.arm_control(); armObj.arm_control();
@@ -286,6 +287,13 @@ void opcontrol() {
pistonControl.control_piston(Pistons::claw_piston, ControlPeriod::driver, pistonControl.control_piston(Pistons::claw_piston, ControlPeriod::driver,
Controller::slave, Buttons::arrow_buttons); Controller::slave, Buttons::arrow_buttons);
armObj.arm_driver_control(Controller::master, Buttons::left_shoulder_buttons);
liftObj.lift_driver_control(Controller::master, Buttons::right_shoulder_buttons);
armObj.arm_driver_control(Controller::slave, Buttons::left_shoulder_buttons);
liftObj.lift_driver_control(Controller::slave, Buttons::right_shoulder_buttons);
wristObj.wrist_driver_control(Controller::slave, Buttons::arrow_buttons);
wristObj.rotate_wrist(90);
// chassis.opcontrol_tank(); // Tank control // chassis.opcontrol_tank(); // Tank control
chassis.opcontrol_arcade_standard(ez::SPLIT); // Standard split arcade chassis.opcontrol_arcade_standard(ez::SPLIT); // Standard split arcade
// chassis.opcontrol_arcade_standard(ez::SINGLE); // Standard single arcade // chassis.opcontrol_arcade_standard(ez::SINGLE); // Standard single arcade