This repository has been archived on 2020-09-21. You can view files and clone it, but cannot push or open issues or pull requests.
FRC2016-old/DriveBase/src/Shooter.h

77 lines
1.3 KiB
C
Raw Normal View History

2016-02-02 10:18:19 -05:00
/*
* Shooter.h
*
* Created on: Feb 2, 2016
* Author: Jason
*/
#ifndef SRC_SHOOTER_H_
#define SRC_SHOOTER_H_
#define PICKUP_POWER 0.5
#define RAMP_LOWER_DURATION 2 //Rotations.
enum RampState {
Shoot = 0, // 0 rotations
Half = 1, // 1 rotation
Down = 2, // 2 rotations
Uncalibrated = -1
};
2016-02-02 10:18:19 -05:00
class Shooter {
public:
/**
* 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;
}
RampState CalibrateRamp() {
// TODO:
// Raise ramp until limit switch is triggered,
// then lower the ramp to its lower limit.
return Down;
}
virtual ~Shooter() {
delete shooterDrive;
2016-02-02 10:18:19 -05:00
}
void PickUp(bool state = true) {
2016-02-07 22:37:10 -05:00
pickup->Set((float) (state * PICKUP_POWER));
}
void SetRamp(RampState state) {
// TODO:
// Move the Ramp to the set position.
}
2016-02-07 22:37:10 -05:00
/**
* Call this to run the pickup backwards if the ball gets jammed somehow...
*/
void Unjam()
{
pickup->Set(-1 * PICKUP_POWER);
}
2016-02-02 10:18:19 -05:00
void SetPower(float power) {
shooterDrive->TankDrive(power, -power, false);
2016-02-02 10:18:19 -05:00
}
private:
RobotDrive *shooterDrive;
CANTalon *pickup;
CANTalon *ramp;
RampState rampState;
2016-02-02 10:18:19 -05:00
};
#endif /* SRC_SHOOTER_H_ */