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

127 lines
4.2 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-25 19:37:37 -07:00
import java.lang.ModuleLayer.Controller;
import javax.naming.ldap.Control;
import com.ctre.phoenix.sensors.CANCoder;
2022-01-25 19:56:18 -07:00
import com.revrobotics.CANSparkMax.IdleMode;
2022-01-25 19:37:37 -07:00
import edu.wpi.first.util.sendable.Sendable;
2022-01-24 19:55:08 -07:00
import edu.wpi.first.wpilibj.drive.RobotDriveBase.MotorType;
2022-01-25 19:37:37 -07:00
import edu.wpi.first.wpilibj.interfaces.Gyro;
2022-01-24 19:55:08 -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-01-24 19:55:08 -07:00
import frc4388.robot.Constants.ShooterConstants;
import frc4388.utility.Gains;
2022-01-20 18:08:05 -07:00
2022-01-25 19:56:18 -07:00
public class Turret<CANSparkMax, CANDigitalInput,> extends SubsystemBase {
2022-01-25 19:37:37 -07:00
private static final String turretMotor = null;
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-01-25 19:37:37 -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;
CANDigitalInput 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-01-25 19:37:37 -07:00
Controller m_boomBoomRotatePIDController = m_boomBoomRotateMotor.getPIDController();
public CANCoder m_boomBoomRotateEncoder = m_boomBoomRotateMotor.getEncoder();
2022-01-21 17:59:12 -07:00
//Variables
2022-01-25 19:56:18 -07:00
public Turret() {
2022-01-24 19:55:08 -07:00
2022-01-25 19:56:18 -07:00
2022-01-24 19:55:08 -07:00
m_boomBoomRotateMotor.setIdleMode(IdleMode.kBrake);
2022-01-25 19:37:37 -07:00
boolean enableLimitSwitch = true;
2022-01-24 19:55:08 -07:00
m_turretGyro = getGyroInterface();
m_boomBoomLeftLimit = m_boomBoomRotateMotor.getReverseLimitSwitch(LimitSwitchPolarity.kNormallyOpen);
m_boomBoomRightLimit = m_boomBoomRotateMotor.getForwardLimitSwitch(LimitSwitchPolarity.kNormallyOpen);
2022-01-25 19:37:37 -07:00
m_boomBoomRightLimit.enableLimitSwitch;
m_boomBoomLeftLimit.enableLimitSwitch;
2022-01-24 19:55:08 -07:00
m_boomBoomRotateMotor.enableSoftLimit(SoftLimitDirection.kForward, false);
m_boomBoomRotateMotor.enableSoftLimit(SoftLimitDirection.kReverse, true);
m_boomBoomRotateMotor.setSoftLimit(SoftLimitDirection.kForward, ShooterConstants.TURRET_RIGHT_SOFT_LIMIT);
2022-01-25 19:37:37 -07:00
boolean setInverted = false;
m_boomBoomRotateMotor.setInverted;
Object turretMotor;
Object m_turretMotor = turretMotor;
}
2022-01-24 19:55:08 -07:00
2022-01-25 19:37:37 -07:00
private Gyro getGyroInterface() {
return null;
2022-01-21 17:59:12 -07:00
}
2022-01-20 18:08:05 -07:00
@Override
public void periodic() {
2022-01-24 19:55:08 -07:00
SmartDashboard.putNumber("Turret Angle Raw", getboomBoomRotatePosition());
2022-01-25 19:37:37 -07:00
SmartDashboard.putData("Turret Angle", (Sendable) m_turretGyro);
2022-01-24 19:55:08 -07:00
SmartDashboard.putBoolean("Turret Aimed", m_isAimReady);
2022-01-20 18:08:05 -07:00
// This method will be called once per scheduler run
}
2022-01-21 17:59:12 -07:00
2022-01-24 19:55:08 -07:00
public void passRequiredSubsystem( BoomBoom subsystem0, SwerveDrive subsystem1){
m_boomBoomSubsystem = subsystem0;
m_sDriveSubsystem = subsystem1;
}
public void runShooterWithInput(double input) {
m_boomBoomRotateMotor.set(input*ShooterConstants.TURRET_SPEED_MULTIPLIER);
}
public void runshooterRotatePID(double targetAngle) {
m_boomBoomRotatePIDController.setP(m_shooterTGains.m_kP);
m_boomBoomRotatePIDController.setI(m_shooterTGains.m_kI);
m_boomBoomRotatePIDController.setD(m_shooterTGains.m_kD);
2022-01-25 19:37:37 -07:00
m_boomBoomRotatePIDController.setF(m_shooterTGains.m_kF);
2022-01-24 19:55:08 -07:00
m_boomBoomRotatePIDController.setIZone(m_shooterTGains.m_kIzone);
m_boomBoomRotatePIDController.setOutputRange(ShooterConstants.SHOOTER_TURRET_MIN, m_shooterTGains.m_kPeakOutput);
targetAngle = targetAngle/ShooterConstants.DEGREES_PER_ROT;
m_boomBoomRotatePIDController.setReference(targetAngle,ControlType.kPosition);
}
public void resetGyroShooterRotate()
{
m_boomBoomRotateEncoder.setPosition(0);
}
public double getboomBoomRotatePosition()
{
return m_boomBoomRotateEncoder.getPosition();
}
public double getAnglePositionDegrees() {
return (m_boomBoomRotateEncoder.getPosition() - ShooterConstants.TURRET_MOTOR_POS_AT_ZERO_ROT) * 360/ShooterConstants. TURRET_MOTOR_ROTS_PER_ROT;
}
2022-01-21 20:56:25 -07:00
public void turnWithJoystick (double input)
{
2022-01-25 19:37:37 -07:00
turretMotor.set(input);
2022-01-21 20:56:25 -07:00
}
2022-01-21 17:59:12 -07:00
//function turnWithJoystick(double input)
// motor.set(input)
2022-01-20 18:08:05 -07:00
}
2022-01-21 17:59:12 -07:00
2022-01-21 20:56:25 -07:00
2022-01-21 17:59:12 -07:00
/** TODO
* setPosition function
* Limit switches
**/