2014-06-24 16:54:17 -07:00
|
|
|
#ifndef Shooter_H
|
|
|
|
|
#define Shooter_H
|
|
|
|
|
|
|
|
|
|
#include "Commands/Subsystem.h"
|
|
|
|
|
#include "WPILib.h"
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The Shooter subsystem handles shooting. The mechanism for shooting is
|
|
|
|
|
* slightly complicated because it has to pneumatic cylinders for shooting, and
|
|
|
|
|
* a third latch to allow the pressure to partially build up and reduce the
|
|
|
|
|
* effect of the airflow. For shorter shots, when full power isn't needed, only
|
|
|
|
|
* one cylinder fires.
|
|
|
|
|
*
|
|
|
|
|
* NOTE: Simulation currently approximates this as as single pneumatic cylinder
|
|
|
|
|
* and ignores the latch.
|
|
|
|
|
*/
|
|
|
|
|
class Shooter: public Subsystem
|
|
|
|
|
{
|
|
|
|
|
private:
|
|
|
|
|
// Devices
|
2015-07-24 19:19:40 -04:00
|
|
|
std::shared_ptr<DoubleSolenoid> piston1;
|
|
|
|
|
std::shared_ptr<DoubleSolenoid> piston2;
|
|
|
|
|
std::shared_ptr<Solenoid> latchPiston;
|
|
|
|
|
std::shared_ptr<DigitalInput> piston1ReedSwitchFront;
|
|
|
|
|
std::shared_ptr<DigitalInput> piston1ReedSwitchBack;
|
|
|
|
|
std::shared_ptr<DigitalInput> hotGoalSensor; // NOTE: Currently ignored in simulation
|
2014-06-24 16:54:17 -07:00
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
Shooter();
|
|
|
|
|
void InitDefaultCommand();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Extend both solenoids to shoot.
|
|
|
|
|
*/
|
|
|
|
|
void ExtendBoth();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Retract both solenoids to prepare to shoot.
|
|
|
|
|
*/
|
|
|
|
|
void RetractBoth();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Extend solenoid 1 to shoot.
|
|
|
|
|
*/
|
|
|
|
|
void Extend1();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Retract solenoid 1 to prepare to shoot.
|
|
|
|
|
*/
|
|
|
|
|
void Retract1();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Extend solenoid 2 to shoot.
|
|
|
|
|
*/
|
|
|
|
|
void Extend2();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Retract solenoid 2 to prepare to shoot.
|
|
|
|
|
*/
|
|
|
|
|
void Retract2();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Turns off the piston1 double solenoid. This won't actuate anything
|
|
|
|
|
* because double solenoids preserve their state when turned off. This
|
|
|
|
|
* should be called in order to reduce the amount of time that the coils are
|
|
|
|
|
* powered.
|
|
|
|
|
*/
|
|
|
|
|
void Off1();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Turns off the piston1 double solenoid. This won't actuate anything
|
|
|
|
|
* because double solenoids preserve their state when turned off. This
|
|
|
|
|
* should be called in order to reduce the amount of time that the coils are
|
|
|
|
|
* powered.
|
|
|
|
|
*/
|
|
|
|
|
void Off2();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Release the latch so that we can shoot
|
|
|
|
|
*/
|
|
|
|
|
void Unlatch();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Latch so that pressure can build up and we aren't limited by air flow.
|
|
|
|
|
*/
|
|
|
|
|
void Latch();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Toggles the latch postions
|
|
|
|
|
*/
|
|
|
|
|
void ToggleLatchPosition();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return Whether or not piston 1 is fully extended.
|
|
|
|
|
*/
|
|
|
|
|
bool Piston1IsExtended();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return Whether or not piston 1 is fully retracted.
|
|
|
|
|
*/
|
|
|
|
|
bool Piston1IsRetracted();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Turns off all double solenoids. Double solenoids hold their position when
|
|
|
|
|
* they are turned off. We should turn them off whenever possible to extend
|
|
|
|
|
* the life of the coils
|
|
|
|
|
*/
|
|
|
|
|
void OffBoth();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return Whether or not the goal is hot as read by the banner sensor
|
|
|
|
|
*/
|
|
|
|
|
bool GoalIsHot();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|