2016-02-09 16:23:45 -05:00
/*
* Shooter . h
*
* Created on : Feb 2 , 2016
* Author : Jason
*/
# ifndef SRC_SHOOTER_H_
# define SRC_SHOOTER_H_
2016-02-10 20:13:33 -05:00
# define PICKUP_POWER 0.8
2016-02-09 16:23:45 -05:00
# 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
2016-02-09 17:27:58 -05:00
Half = ( RAMP_LOWER_DURATION / 2 ) , // 1 rotation?
Down = RAMP_LOWER_DURATION , // 2 rotations?
Uncalibrated = - 1 ,
Transitioning = - 2
2016-02-09 16:23:45 -05:00
} ;
class Shooter {
public :
/**
* Shooter talons and ramp talon .
* s2 is also for the pickup - mechanism and can be controlled independently .
*
*/
2016-02-10 14:42:20 -05:00
Shooter ( CANTalon * s1 , CANTalon * s2 , CANTalon * r ) {
2016-02-10 15:23:07 -05:00
// shooterDrive = new RobotDrive(s1, s2);
launcher = s1 ;
2016-02-09 16:23:45 -05:00
pickup = s2 ;
ramp = r ;
rampState = Uncalibrated ;
}
/**
* 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 ( ) {
2016-02-10 15:23:07 -05:00
delete launcher ;
2016-02-09 16:23:45 -05:00
delete pickup ;
delete ramp ;
}
void PickUp ( bool state = true ) {
pickup - > Set ( ( float ) ( state * PICKUP_POWER ) ) ;
2016-02-10 15:23:07 -05:00
std : : cout < < " picking up! \n " ;
2016-02-09 16:23:45 -05:00
}
void SetRamp ( RampState state ) {
// TODO:
// Move the Ramp to the set position.
2016-02-10 13:39:48 -05:00
switch ( state )
{
2016-02-10 19:55:20 -05:00
case Shoot :
2016-02-10 13:39:48 -05:00
{
2016-02-10 19:55:20 -05:00
if ( ramp - > GetForwardLimitOK ( ) )
{
ramp - > Set ( 1 ) ;
} else
{
ramp - > Set ( 0 ) ;
}
}
case Half :
{
//yeah, put something here when you get the encoder working.
std : : cout < < " Hey! Didja install an encoder? Because this is placeholder that Aidan would have removed if you had installed one and told him about it. \n " ;
}
case Down :
2016-02-10 13:39:48 -05:00
{
2016-02-10 19:55:20 -05:00
//see half.
std : : cout < < " Hey! Didja install an encoder? Because this is placeholder that Aidan would have removed if you had installed one and told him about it. \n " ;
2016-02-10 13:39:48 -05:00
}
}
2016-02-09 16:23:45 -05:00
}
/**
* Call this to run the pickup backwards if the ball gets jammed somehow . . .
*/
void Unjam ( )
{
pickup - > Set ( - 1 * PICKUP_POWER ) ;
}
void SetPower ( float power ) {
2016-02-10 15:23:07 -05:00
pickup - > Set ( power ) ;
launcher - > Set ( power ) ;
std : : cout < < " setting shooter power " < < std : : endl ;
2016-02-09 16:23:45 -05:00
}
private :
RobotDrive * shooterDrive ;
2016-02-10 15:23:07 -05:00
CANTalon * launcher ;
2016-02-09 16:23:45 -05:00
CANTalon * pickup ;
CANTalon * ramp ;
RampState rampState ;
2016-02-09 17:27:58 -05:00
RampState targetState ;
RampState previousState ;
2016-02-09 16:23:45 -05:00
} ;
# endif /* SRC_SHOOTER_H_ */