diff --git a/DriveBase/src/Robot.cpp b/DriveBase/src/Robot.cpp index 4a8ad95..cc574d5 100644 --- a/DriveBase/src/Robot.cpp +++ b/DriveBase/src/Robot.cpp @@ -15,6 +15,7 @@ class Robot: public IterativeRobot { CANTalon l2_drive; CANTalon shooter1; CANTalon shooter2; + CANTalon ramp; TankDrive drive; Shooter shooter; Joystick rstick, lstick; @@ -31,10 +32,11 @@ public: l2_drive(4), // left wheel 2 shooter1(10), // shooter drive 1 shooter2(11), // shooter drive 2 + ramp(12), drive( // initialize TankDrive object. &l1_drive, &l2_drive, &r1_drive, &r2_drive), shooter( // initialize Shooter object. - &shooter1, &shooter2), + &shooter1, &shooter2, &ramp), rstick(0), // right stick (operator) lstick(1) // left stick (driver) { diff --git a/DriveBase/src/Shooter.h b/DriveBase/src/Shooter.h index 3a44dcf..6971715 100644 --- a/DriveBase/src/Shooter.h +++ b/DriveBase/src/Shooter.h @@ -8,22 +8,83 @@ #ifndef SRC_SHOOTER_H_ #define SRC_SHOOTER_H_ +#define PICKUP_POWER 0.5 +#define RAMP_LOWER_DURATION 2 //Rotations. + + +/** + * You can use the values assigned to each of these values as the number + * of rotations to run the motor down from the "Shoot" position. + * + * This might not be the best way to do it, and also requires that we + * figure out how to read the Hall Effect signal from the motor. + */ +enum RampState { + Shoot = 0, // 0 rotations + Half = 1, // 1 rotation? + Down = 2, // 2 rotations? + Uncalibrated = -1 +}; + class Shooter { public: - Shooter(CANTalon *s1, CANTalon *s2) { + /** + * Shooter talons and ramp talon. + * s2 is also for the pickup-mechanism and can be controlled independently. + * + */ + Shooter(CANTalon *s1, CANTalon *s2, CANTalon *r) { shooterDrive = new RobotDrive(s1, s2); + pickup = s2; + ramp = r; + rampState = Uncalibrated; } - virtual ~Shooter() - { + /** + * Call this method on TeleopInit so that the ramp is properly + * set at the beginning of the match. + */ + RampState CalibrateRamp() { + // TODO: + // Raise ramp until limit switch is triggered, + // then lower the ramp to its lower limit. + + return Down; + } + + virtual ~Shooter() { delete shooterDrive; + delete pickup; + delete ramp; + } + + void PickUp(bool state = true) { + pickup->Set((float) (state * PICKUP_POWER)); + } + + void SetRamp(RampState state) { + // TODO: + // Move the Ramp to the set position. + } + + /** + * Call this to run the pickup backwards if the ball gets jammed somehow... + */ + void Unjam() + { + pickup->Set(-1 * PICKUP_POWER); } void SetPower(float power) { shooterDrive->TankDrive(power, -power, false); } private: + RobotDrive *shooterDrive; + CANTalon *pickup; + CANTalon *ramp; + + RampState rampState; }; #endif /* SRC_SHOOTER_H_ */