2022-01-20 18:08:05 -07:00
|
|
|
// Copyright (c) FIRST and other WPILib contributors.
|
|
|
|
|
// Open Source Software; you can modify and/or share it under the terms of
|
|
|
|
|
// the WPILib BSD license file in the root directory of this project.
|
|
|
|
|
|
|
|
|
|
package frc4388.robot.subsystems;
|
|
|
|
|
|
2022-01-26 16:53:05 -07:00
|
|
|
import com.revrobotics.CANSparkMax.ControlType;
|
2022-01-25 19:56:18 -07:00
|
|
|
import com.revrobotics.CANSparkMax.IdleMode;
|
2022-02-28 17:13:13 -07:00
|
|
|
import com.revrobotics.CANSparkMax.SoftLimitDirection;
|
|
|
|
|
|
|
|
|
|
import java.util.concurrent.TimeoutException;
|
|
|
|
|
|
2022-01-26 16:53:05 -07:00
|
|
|
import com.revrobotics.CANSparkMax;
|
|
|
|
|
import com.revrobotics.RelativeEncoder;
|
|
|
|
|
import com.revrobotics.SparkMaxLimitSwitch;
|
|
|
|
|
import com.revrobotics.SparkMaxPIDController;
|
2022-02-28 16:54:46 -07:00
|
|
|
|
2022-01-25 19:37:37 -07:00
|
|
|
import edu.wpi.first.wpilibj.interfaces.Gyro;
|
2022-01-28 19:35:24 -07:00
|
|
|
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
|
2022-01-20 18:08:05 -07:00
|
|
|
import edu.wpi.first.wpilibj2.command.SubsystemBase;
|
2022-02-28 16:54:46 -07:00
|
|
|
|
2022-01-24 19:55:08 -07:00
|
|
|
import frc4388.robot.Constants.ShooterConstants;
|
2022-02-28 17:13:13 -07:00
|
|
|
import frc4388.robot.commands.Shoot;
|
2022-01-24 19:55:08 -07:00
|
|
|
import frc4388.utility.Gains;
|
2022-01-26 16:53:05 -07:00
|
|
|
|
|
|
|
|
public class Turret extends SubsystemBase {
|
2022-02-24 18:12:57 -07:00
|
|
|
|
2022-01-20 18:08:05 -07:00
|
|
|
/** Creates a new Turret. */
|
2022-01-24 19:55:08 -07:00
|
|
|
public BoomBoom m_boomBoomSubsystem;
|
|
|
|
|
public SwerveDrive m_sDriveSubsystem;
|
|
|
|
|
|
2022-02-24 18:12:57 -07:00
|
|
|
public CANSparkMax m_boomBoomRotateMotor;// = new CANSparkMax(ShooterConstants.SHOOTER_ROTATE_ID,
|
|
|
|
|
// MotorType.kBrushless);
|
2022-01-24 19:55:08 -07:00
|
|
|
public static Gains m_shooterTGains = ShooterConstants.SHOOTER_TURRET_GAINS;
|
2022-01-26 16:53:05 -07:00
|
|
|
SparkMaxLimitSwitch m_boomBoomRightLimit, m_boomBoomLeftLimit;
|
2022-01-25 19:37:37 -07:00
|
|
|
public Gyro m_turretGyro;
|
2022-01-24 19:55:08 -07:00
|
|
|
|
|
|
|
|
public double m_targetDistance = 0;
|
|
|
|
|
|
|
|
|
|
public boolean m_isAimReady = false;
|
|
|
|
|
|
2022-02-05 14:27:11 -07:00
|
|
|
SparkMaxPIDController m_boomBoomRotatePIDController;// = m_boomBoomRotateMotor.getPIDController();
|
|
|
|
|
public RelativeEncoder m_boomBoomRotateEncoder;// = m_boomBoomRotateMotor.getEncoder();
|
2022-02-24 18:12:57 -07:00
|
|
|
|
|
|
|
|
// Variables
|
|
|
|
|
public Turret(CANSparkMax boomBoomRotateMotor) { // Take in rotate motor as an argument
|
2022-01-24 19:55:08 -07:00
|
|
|
|
2022-02-19 11:05:44 -07:00
|
|
|
m_boomBoomRotateMotor = boomBoomRotateMotor;
|
2022-02-05 14:27:11 -07:00
|
|
|
m_boomBoomRotatePIDController = m_boomBoomRotateMotor.getPIDController();
|
|
|
|
|
m_boomBoomRotateEncoder = m_boomBoomRotateMotor.getEncoder();
|
2022-01-24 19:55:08 -07:00
|
|
|
m_boomBoomRotateMotor.setIdleMode(IdleMode.kBrake);
|
2022-02-24 18:12:57 -07:00
|
|
|
|
2022-01-26 16:53:05 -07:00
|
|
|
m_boomBoomLeftLimit = m_boomBoomRotateMotor.getReverseLimitSwitch(SparkMaxLimitSwitch.Type.kNormallyOpen);
|
|
|
|
|
m_boomBoomRightLimit = m_boomBoomRotateMotor.getForwardLimitSwitch(SparkMaxLimitSwitch.Type.kNormallyOpen);
|
|
|
|
|
m_boomBoomRightLimit.enableLimitSwitch(true);
|
|
|
|
|
m_boomBoomLeftLimit.enableLimitSwitch(true);
|
2022-02-25 20:18:21 -07:00
|
|
|
SmartDashboard.putBoolean("Right Limit Switch Enabled", m_boomBoomRightLimit.isLimitSwitchEnabled());
|
|
|
|
|
SmartDashboard.putBoolean("Left Limit Switch Enabled", m_boomBoomLeftLimit.isLimitSwitchEnabled());
|
2022-01-24 19:55:08 -07:00
|
|
|
|
2022-02-28 17:13:13 -07:00
|
|
|
m_boomBoomRotateMotor.setSoftLimit(SoftLimitDirection.kForward, ShooterConstants.TURRET_FORWARD_LIMIT);
|
|
|
|
|
m_boomBoomRotateMotor.setSoftLimit(SoftLimitDirection.kReverse, ShooterConstants.TURRET_REVERSE_LIMIT);
|
2022-02-28 17:20:01 -07:00
|
|
|
setTurretSoftLimits(true);
|
2022-02-28 17:13:13 -07:00
|
|
|
|
2022-01-26 16:53:05 -07:00
|
|
|
m_boomBoomRotateMotor.setInverted(false);
|
2022-02-19 15:05:49 -07:00
|
|
|
|
2022-03-05 11:07:54 -07:00
|
|
|
m_boomBoomRotatePIDController.setP(m_shooterTGains.kP);
|
|
|
|
|
m_boomBoomRotatePIDController.setI(m_shooterTGains.kI);
|
|
|
|
|
m_boomBoomRotatePIDController.setD(m_shooterTGains.kD);
|
|
|
|
|
m_boomBoomRotatePIDController.setFF(m_shooterTGains.kF);
|
|
|
|
|
m_boomBoomRotatePIDController.setIZone(m_shooterTGains.kIzone);
|
|
|
|
|
m_boomBoomRotatePIDController.setOutputRange(ShooterConstants.SHOOTER_TURRET_MIN, m_shooterTGains.kPeakOutput);
|
2022-01-25 19:37:37 -07:00
|
|
|
}
|
2022-01-24 19:55:08 -07:00
|
|
|
|
2022-01-20 18:08:05 -07:00
|
|
|
@Override
|
|
|
|
|
public void periodic() {
|
|
|
|
|
// This method will be called once per scheduler run
|
|
|
|
|
}
|
2022-01-21 17:59:12 -07:00
|
|
|
|
2022-02-28 17:13:13 -07:00
|
|
|
/**
|
|
|
|
|
* Set status of turret motor soft limits.
|
|
|
|
|
* @param set Boolean to set soft limits to.
|
|
|
|
|
*/
|
2022-02-28 17:20:01 -07:00
|
|
|
public void setTurretSoftLimits(boolean set) {
|
2022-02-28 17:13:13 -07:00
|
|
|
m_boomBoomRotateMotor.enableSoftLimit(SoftLimitDirection.kForward, set);
|
|
|
|
|
m_boomBoomRotateMotor.enableSoftLimit(SoftLimitDirection.kReverse, set);
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-24 18:12:57 -07:00
|
|
|
public void passRequiredSubsystem(BoomBoom subsystem0, SwerveDrive subsystem1) {
|
2022-01-24 19:55:08 -07:00
|
|
|
m_boomBoomSubsystem = subsystem0;
|
|
|
|
|
m_sDriveSubsystem = subsystem1;
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-19 15:05:49 -07:00
|
|
|
public void runTurretWithInput(double input) {
|
2022-02-24 18:12:57 -07:00
|
|
|
m_boomBoomRotateMotor.set(input * ShooterConstants.TURRET_SPEED_MULTIPLIER);
|
2022-01-24 19:55:08 -07:00
|
|
|
}
|
|
|
|
|
|
2022-02-19 15:05:49 -07:00
|
|
|
public void runshooterRotatePID(double targetAngle) {
|
2022-02-24 18:12:57 -07:00
|
|
|
targetAngle = targetAngle / ShooterConstants.DEGREES_PER_ROT;
|
|
|
|
|
m_boomBoomRotatePIDController.setReference(targetAngle, ControlType.kPosition);
|
2022-01-24 19:55:08 -07:00
|
|
|
}
|
|
|
|
|
|
2022-02-24 18:12:57 -07:00
|
|
|
public void resetGyroShooterRotate() {
|
2022-01-24 19:55:08 -07:00
|
|
|
m_boomBoomRotateEncoder.setPosition(0);
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-24 18:12:57 -07:00
|
|
|
public double getboomBoomRotatePosition() {
|
2022-01-24 19:55:08 -07:00
|
|
|
return m_boomBoomRotateEncoder.getPosition();
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-19 11:05:44 -07:00
|
|
|
public double getBoomBoomAngleDegrees() {
|
2022-02-24 18:12:57 -07:00
|
|
|
return (m_boomBoomRotateEncoder.getPosition() - ShooterConstants.TURRET_MOTOR_POS_AT_ZERO_ROT) * 360
|
|
|
|
|
/ ShooterConstants.TURRET_MOTOR_ROTS_PER_ROT;
|
2022-01-24 19:55:08 -07:00
|
|
|
}
|
2022-01-21 20:56:25 -07:00
|
|
|
|
2022-02-17 19:54:24 -07:00
|
|
|
}
|