Files
2022NoWayHome/src/main/java/frc4388/robot/subsystems/Turret.java
T

151 lines
5.5 KiB
Java
Raw Normal View History

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;
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-03-16 12:05:34 -06:00
import frc4388.robot.commands.ShooterCommands.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-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;
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-03-16 13:59:10 -06:00
public SparkMaxPIDController m_boomBoomRotatePIDController;
public RelativeEncoder m_boomBoomRotateEncoder;
2022-01-24 19:55:08 -07:00
2022-03-16 12:05:34 -06:00
SparkMaxLimitSwitch m_boomBoomLeftLimit;
SparkMaxLimitSwitch m_boomBoomRightLimit;
2022-03-16 11:22:51 -06:00
public Turret(CANSparkMax boomBoomRotateMotor) {
2022-01-24 19:55:08 -07:00
2022-02-19 11:05:44 -07:00
m_boomBoomRotateMotor = boomBoomRotateMotor;
m_boomBoomRotatePIDController = m_boomBoomRotateMotor.getPIDController();
m_boomBoomRotateEncoder = m_boomBoomRotateMotor.getEncoder();
2022-03-16 12:05:34 -06:00
m_boomBoomLeftLimit = m_boomBoomRotateMotor.getReverseLimitSwitch(SparkMaxLimitSwitch.Type.kNormallyOpen);
m_boomBoomRightLimit = m_boomBoomRotateMotor.getForwardLimitSwitch(SparkMaxLimitSwitch.Type.kNormallyOpen);
2022-03-16 14:32:41 -06:00
setTurretLimitSwitches(true);
2022-01-24 19:55:08 -07:00
2022-03-07 15:26:05 -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-03-06 15:05:08 -07:00
m_boomBoomRotateMotor.setSoftLimit(SoftLimitDirection.kForward, (float) ShooterConstants.TURRET_FORWARD_LIMIT);
m_boomBoomRotateMotor.setSoftLimit(SoftLimitDirection.kReverse, (float) ShooterConstants.TURRET_REVERSE_LIMIT);
2022-03-12 22:19:42 -07:00
setTurretSoftLimits(true);
2022-02-28 17:13:13 -07:00
2022-03-16 11:22:51 -06:00
setTurretPIDGains();
}
/**
* Set gains for turret PIDs.
*/
public void setTurretPIDGains() {
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-03-16 14:32:41 -06:00
2022-03-13 17:57:36 -06:00
SmartDashboard.putNumber("Turret Angle Rotations", m_boomBoomRotateEncoder.getPosition());
2022-03-14 16:56:32 -06:00
SmartDashboard.putNumber("Turret Angle Degrees", m_boomBoomRotateEncoder.getPosition() * ShooterConstants.TURRET_DEGREES_PER_ROT);
2022-03-16 14:32:41 -06:00
SmartDashboard.putBoolean("Left Limit Switch Pressed", m_boomBoomLeftLimit.isPressed());
SmartDashboard.putBoolean("Right Limit Switch Pressed", m_boomBoomRightLimit.isPressed());
2022-03-16 12:05:34 -06:00
if (m_boomBoomLeftLimit.isPressed()) m_boomBoomRotateEncoder.setPosition(ShooterConstants.TURRET_REVERSE_LIMIT - 2);
if (m_boomBoomRightLimit.isPressed()) m_boomBoomRotateEncoder.setPosition(ShooterConstants.TURRET_FORWARD_LIMIT + 2);
2022-01-20 18:08:05 -07:00
}
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-03-16 11:22:51 -06:00
/**
* Set status of turret limit switches.
* @param set Boolean to set limit switches to.
*/
public void setTurretLimitSwitches(boolean set) {
m_boomBoomRightLimit.enableLimitSwitch(set);
m_boomBoomLeftLimit.enableLimitSwitch(set);
}
public void passRequiredSubsystem(BoomBoom subsystem0, SwerveDrive subsystem1) {
2022-01-24 19:55:08 -07:00
m_boomBoomSubsystem = subsystem0;
m_sDriveSubsystem = subsystem1;
}
2022-03-16 12:05:34 -06:00
/**
* Move the turret with an input
* @param input from -1.0 to 1.0, positive is clockwise
*/
2022-02-19 15:05:49 -07:00
public void runTurretWithInput(double input) {
m_boomBoomRotateMotor.set(input * ShooterConstants.TURRET_SPEED_MULTIPLIER);
2022-01-24 19:55:08 -07:00
}
2022-03-14 18:58:44 -06:00
public void runShooterRotatePID(double targetAngle) {
2022-03-14 16:56:32 -06:00
targetAngle = targetAngle / ShooterConstants.TURRET_DEGREES_PER_ROT;
m_boomBoomRotatePIDController.setReference(targetAngle, ControlType.kPosition);
2022-01-24 19:55:08 -07:00
}
public void resetGyroShooterRotate() {
2022-01-24 19:55:08 -07:00
m_boomBoomRotateEncoder.setPosition(0);
}
2022-03-14 18:58:44 -06:00
/**
* Run a PID to go to the zero position.
*/
public void gotoZero() {
runShooterRotatePID(0);
}
2022-03-16 11:22:51 -06:00
/**
* Run a PID to go to the midpoint position, between the two soft limits.
*/
public void gotoMidpoint() {
runShooterRotatePID(-44 * ShooterConstants.TURRET_DEGREES_PER_ROT);
}
2022-03-16 11:47:40 -06:00
public double getEncoderPosition() {
2022-01-24 19:55:08 -07:00
return m_boomBoomRotateEncoder.getPosition();
}
2022-02-19 11:05:44 -07:00
public double getBoomBoomAngleDegrees() {
2022-03-16 13:59:10 -06:00
return (getEncoderPosition() * ShooterConstants.TURRET_DEGREES_PER_ROT);
}
2022-01-21 20:56:25 -07:00
2022-03-12 11:36:10 -07:00
public double getCurrent(){
return m_boomBoomRotateMotor.getOutputCurrent();
}
2022-02-17 19:54:24 -07:00
}