diff --git a/src/main/java/frc/robot/commands/Autos.java b/src/main/java/frc/robot/commands/Autos.java index 43a0e77..167eb33 100644 --- a/src/main/java/frc/robot/commands/Autos.java +++ b/src/main/java/frc/robot/commands/Autos.java @@ -17,4 +17,4 @@ // private Autos() { // throw new UnsupportedOperationException("This is a utility class!"); // } -// } +// } \ No newline at end of file diff --git a/src/main/java/frc/robot/subsystems/AlgaeArm/AlgaeArmIOCB.java b/src/main/java/frc/robot/subsystems/AlgaeArm/AlgaeArmIOCB.java index 9ad1738..cac83fb 100644 --- a/src/main/java/frc/robot/subsystems/AlgaeArm/AlgaeArmIOCB.java +++ b/src/main/java/frc/robot/subsystems/AlgaeArm/AlgaeArmIOCB.java @@ -1,7 +1,7 @@ // 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. - +//if CB & PB IO files have equal values, remove from PB, which extends CB. Everything "private" must be "protected" package frc.robot.subsystems.AlgaeArm; import com.revrobotics.RelativeEncoder; @@ -19,24 +19,21 @@ public class AlgaeArmIOCB implements AlgaeArmIO { - private final SparkMax armMotor = - new SparkMax(Constants.CompBotConstants.ALGAE_ARM_ID, MotorType.kBrushless); // placeholder - // // ID - private final RelativeEncoder encoder = armMotor.getEncoder(); - - private final double kP = 0.25; - private final double kI = 0.0; - private final double kD = 0.0; + protected final SparkMax armMotor = new SparkMax(Constants.CompBotConstants.ALGAE_ARM_ID, MotorType.kBrushless); // placeholder // ID + protected final RelativeEncoder encoder = armMotor.getEncoder(); + + protected final double kP = 0.025; + protected final double kI = 0.0; + protected final double kD = 0.0; - private final double POSITION_CONVERSION_FACTOR = - (1.0 / 5.0) * (1.0 / 5.0) * (18.0 / 36.0) * (360.0 / 1.0); - private final double VELOCITY_CONVERSION_FACTOR = POSITION_CONVERSION_FACTOR / 60.0; + protected final double POSITION_CONVERSION_FACTOR = (1.0 / 5.0) * (1.0 / 5.0) * (18.0 / 36.0) * (360.0 / 1.0); + protected final double VELOCITY_CONVERSION_FACTOR = POSITION_CONVERSION_FACTOR / 60.0; - private final double FORWARD_LIMIT = 180.0; - private final double REVERSE_LIMIT = -18.0; - private final SparkMaxConfig sparkMaxConfig = new SparkMaxConfig(); + protected final double FORWARD_LIMIT = 150.0; + protected final double REVERSE_LIMIT = 10.0; + protected final SparkMaxConfig sparkMaxConfig = new SparkMaxConfig(); - private final double MAX_OUTPUT = 0.5; + protected final double MAX_OUTPUT = 0.5; /** Creates a new AlgaeArmIOPB. */ public AlgaeArmIOCB() { @@ -94,4 +91,4 @@ public void enableReverseSoftLimit(boolean enabled) { public void setEncoder(double value) { encoder.setPosition(value); } -} +} \ No newline at end of file diff --git a/src/main/java/frc/robot/subsystems/AlgaeArm/AlgaeArmIOPB.java b/src/main/java/frc/robot/subsystems/AlgaeArm/AlgaeArmIOPB.java index 813f5b7..669504c 100644 --- a/src/main/java/frc/robot/subsystems/AlgaeArm/AlgaeArmIOPB.java +++ b/src/main/java/frc/robot/subsystems/AlgaeArm/AlgaeArmIOPB.java @@ -4,94 +4,8 @@ package frc.robot.subsystems.AlgaeArm; -import com.revrobotics.RelativeEncoder; -import com.revrobotics.spark.SparkBase.ControlType; -import com.revrobotics.spark.SparkBase.PersistMode; -import com.revrobotics.spark.SparkBase.ResetMode; -import com.revrobotics.spark.SparkLowLevel.MotorType; -import com.revrobotics.spark.SparkMax; -import com.revrobotics.spark.config.ClosedLoopConfig; -import com.revrobotics.spark.config.EncoderConfig; -import com.revrobotics.spark.config.SoftLimitConfig; -import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; -import com.revrobotics.spark.config.SparkMaxConfig; -import frc.robot.Constants; - -public class AlgaeArmIOPB implements AlgaeArmIO { - - private final SparkMax armMotor = - new SparkMax( - Constants.PracticeBotConstants.ALGAE_ARM_ID, MotorType.kBrushless); // placeholder - // // ID - private final RelativeEncoder encoder = armMotor.getEncoder(); - - private final double kP = 0.025; - private final double kI = 0.0; - private final double kD = 0.0; - - private final double POSITION_CONVERSION_FACTOR = - (1.0 / 5.0) * (1.0 / 5.0) * (18.0 / 36.0) * (360.0 / 1.0); - private final double VELOCITY_CONVERSION_FACTOR = POSITION_CONVERSION_FACTOR / 60.0; - - private final double FORWARD_LIMIT = 150.0; - private final double REVERSE_LIMIT = -18.0; - private final SparkMaxConfig sparkMaxConfig = new SparkMaxConfig(); - - private final double MAX_OUTPUT = 0.5; - +public class AlgaeArmIOPB extends AlgaeArmIOCB{ /** Creates a new AlgaeArmIOPB. */ public AlgaeArmIOPB() { - sparkMaxConfig.idleMode(IdleMode.kBrake); - sparkMaxConfig.inverted(false); - - ClosedLoopConfig closedLoopConfig = new ClosedLoopConfig(); - closedLoopConfig.pid(kP, kI, kD); - closedLoopConfig.minOutput(-MAX_OUTPUT); - closedLoopConfig.maxOutput(MAX_OUTPUT); - sparkMaxConfig.apply(closedLoopConfig); - - EncoderConfig encoderConfig = new EncoderConfig(); - encoderConfig.positionConversionFactor(POSITION_CONVERSION_FACTOR); - encoderConfig.velocityConversionFactor(VELOCITY_CONVERSION_FACTOR); - sparkMaxConfig.apply(encoderConfig); - - SoftLimitConfig softLimitConfig = new SoftLimitConfig(); - softLimitConfig.forwardSoftLimit(FORWARD_LIMIT); - softLimitConfig.forwardSoftLimitEnabled(true); - softLimitConfig.reverseSoftLimit(REVERSE_LIMIT); - softLimitConfig.reverseSoftLimitEnabled(true); - sparkMaxConfig.apply(softLimitConfig); - - armMotor.configure( - sparkMaxConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); - } - - public void updateInputs(AlgaeArmIOInputs inputs) { - inputs.algaeArmAngle = encoder.getPosition(); - inputs.algaeArmVelocity = encoder.getVelocity(); - inputs.algaeArmVoltage = armMotor.getBusVoltage() * armMotor.getAppliedOutput(); - inputs.algaeArmCurrent = armMotor.getOutputCurrent(); - inputs.algaeArmTemp = armMotor.getMotorTemperature(); - } - - public void setDutyCycle(double dutyCycle) { - armMotor.set(dutyCycle); - } - - public void setPosition(double position) { - armMotor.getClosedLoopController().setReference(position, ControlType.kPosition); - } - - public void enableReverseSoftLimit(boolean enabled) { - sparkMaxConfig.softLimit.reverseSoftLimitEnabled(enabled); - } - - /** - * method for updating the encoder position - * - * @param value new encoder position in motor rotations - */ - public void setEncoder(double value) { - encoder.setPosition(value); - } -} + } +} \ No newline at end of file diff --git a/src/main/java/frc/robot/subsystems/AlgaeRoller/AlgaeRollerIOCB.java b/src/main/java/frc/robot/subsystems/AlgaeRoller/AlgaeRollerIOCB.java index 2b27d8d..81aea79 100644 --- a/src/main/java/frc/robot/subsystems/AlgaeRoller/AlgaeRollerIOCB.java +++ b/src/main/java/frc/robot/subsystems/AlgaeRoller/AlgaeRollerIOCB.java @@ -11,16 +11,19 @@ import com.revrobotics.spark.SparkMax; import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; import com.revrobotics.spark.config.SparkMaxConfig; + import frc.robot.Constants; public class AlgaeRollerIOCB implements AlgaeRollerIO { - private final SparkMax motor = - new SparkMax(Constants.CompBotConstants.ALGAE_ROLLER, MotorType.kBrushless); - private final SparkMaxConfig config = new SparkMaxConfig(); - private final RelativeEncoder encoder = motor.getEncoder(); + protected SparkMax motor; + protected SparkMaxConfig config = new SparkMaxConfig(); + protected RelativeEncoder encoder; /** Creates a new AlgaeIntakeRollerIOPB. */ public AlgaeRollerIOCB() { + motor = new SparkMax(Constants.CompBotConstants.ALGAE_ROLLER, MotorType.kBrushless); + encoder = motor.getEncoder(); + config.inverted(true); config.idleMode(IdleMode.kCoast); config.smartCurrentLimit(20, 5); diff --git a/src/main/java/frc/robot/subsystems/AlgaeRoller/AlgaeRollerIOPB.java b/src/main/java/frc/robot/subsystems/AlgaeRoller/AlgaeRollerIOPB.java index e9c8e3a..644f8d6 100644 --- a/src/main/java/frc/robot/subsystems/AlgaeRoller/AlgaeRollerIOPB.java +++ b/src/main/java/frc/robot/subsystems/AlgaeRoller/AlgaeRollerIOPB.java @@ -4,36 +4,22 @@ package frc.robot.subsystems.AlgaeRoller; -import com.revrobotics.RelativeEncoder; import com.revrobotics.spark.SparkBase.PersistMode; import com.revrobotics.spark.SparkBase.ResetMode; import com.revrobotics.spark.SparkLowLevel.MotorType; -import com.revrobotics.spark.SparkMax; import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; -import com.revrobotics.spark.config.SparkMaxConfig; +import com.revrobotics.spark.SparkMax; import frc.robot.Constants; -public class AlgaeRollerIOPB implements AlgaeRollerIO { - private final SparkMax motor = - new SparkMax(Constants.PracticeBotConstants.ALGAE_ROLLER, MotorType.kBrushless); - private final SparkMaxConfig config = new SparkMaxConfig(); - private final RelativeEncoder encoder = motor.getEncoder(); +public class AlgaeRollerIOPB extends AlgaeRollerIOCB { /** Creates a new AlgaeIntakeRollerIOPB. */ public AlgaeRollerIOPB() { + super(); + motor = new SparkMax(Constants.PracticeBotConstants.ALGAE_ROLLER, MotorType.kBrushless); + config.inverted(true); config.idleMode(IdleMode.kBrake); motor.configure(config, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); } - - public void setDutyCycle(double dutyCycle) { - motor.set(dutyCycle); - } - - public void updateInputs(AlgaeRollerIOInputs inputs) { - inputs.rollerDutyCycle = motor.get(); - inputs.rollerPosition = encoder.getPosition(); - inputs.rollerVelocity = encoder.getVelocity(); - inputs.rollerCurrent = motor.getAppliedOutput(); - } -} +} \ No newline at end of file diff --git a/src/main/java/frc/robot/subsystems/AlgaeShooter/AlgaeShooterIOCB.java b/src/main/java/frc/robot/subsystems/AlgaeShooter/AlgaeShooterIOCB.java index 8907643..094732e 100644 --- a/src/main/java/frc/robot/subsystems/AlgaeShooter/AlgaeShooterIOCB.java +++ b/src/main/java/frc/robot/subsystems/AlgaeShooter/AlgaeShooterIOCB.java @@ -17,20 +17,26 @@ public class AlgaeShooterIOCB implements AlgaeShooterIO { - private final SparkFlex algaeShooterMotorFront = - new SparkFlex( - Constants.CompBotConstants.ALGAE_SHOOTER_FRONT_ID, MotorType.kBrushless); // no ID - private final SparkFlex algaeShooterMotorBack = - new SparkFlex( - Constants.CompBotConstants.ALGAE_SHOOTER_BACK_ID, MotorType.kBrushless); // no ID + protected final SparkFlex algaeShooterMotorFront; + protected final SparkFlex algaeShooterMotorBack; - private SparkFlexConfig frontConfig = new SparkFlexConfig(); - private SparkFlexConfig backConfig = new SparkFlexConfig(); - private final double positionConversionFactor = 1.0; + protected SparkFlexConfig frontConfig = new SparkFlexConfig(); + protected SparkFlexConfig backConfig = new SparkFlexConfig(); + protected final double positionConversionFactor = 1.0; /** Creates a new AlgaeShooterIOWB. */ public AlgaeShooterIOCB() { - final double kP = 0.00035; + this( + new SparkFlex(Constants.CompBotConstants.ALGAE_SHOOTER_FRONT_ID, MotorType.kBrushless), + new SparkFlex(Constants.CompBotConstants.ALGAE_SHOOTER_BACK_ID, MotorType.kBrushless) + ); + } + + public AlgaeShooterIOCB(SparkFlex algaeShooterMotorFront, SparkFlex algaeShooterMotorBack) { + this.algaeShooterMotorFront = algaeShooterMotorFront; + this.algaeShooterMotorBack = algaeShooterMotorBack; + + final double kP = 0.0; final double kI = 0.0; final double kD = 0.0; final double kFF = 0.00015; diff --git a/src/main/java/frc/robot/subsystems/AlgaeShooter/AlgaeShooterIOPB.java b/src/main/java/frc/robot/subsystems/AlgaeShooter/AlgaeShooterIOPB.java index a76854a..c55ad62 100644 --- a/src/main/java/frc/robot/subsystems/AlgaeShooter/AlgaeShooterIOPB.java +++ b/src/main/java/frc/robot/subsystems/AlgaeShooter/AlgaeShooterIOPB.java @@ -4,7 +4,6 @@ package frc.robot.subsystems.AlgaeShooter; -import com.revrobotics.spark.SparkBase.ControlType; import com.revrobotics.spark.SparkBase.PersistMode; import com.revrobotics.spark.SparkBase.ResetMode; import com.revrobotics.spark.SparkFlex; @@ -12,24 +11,18 @@ import com.revrobotics.spark.config.ClosedLoopConfig; import com.revrobotics.spark.config.EncoderConfig; import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; -import com.revrobotics.spark.config.SparkFlexConfig; -import frc.robot.Constants; - -public class AlgaeShooterIOPB implements AlgaeShooterIO { - private final SparkFlex algaeShooterMotorFront = - new SparkFlex( - Constants.PracticeBotConstants.ALGAE_SHOOTER_FRONT_ID, MotorType.kBrushless); // no ID - private final SparkFlex algaeShooterMotorBack = - new SparkFlex( - Constants.PracticeBotConstants.ALGAE_SHOOTER_BACK_ID, MotorType.kBrushless); // no ID - - private SparkFlexConfig frontConfig = new SparkFlexConfig(); - private SparkFlexConfig backConfig = new SparkFlexConfig(); - private final double positionConversionFactor = 1.0; +import frc.robot.Constants; +public class AlgaeShooterIOPB extends AlgaeShooterIOCB { + /** Creates a new AlgaeShooterIOWB. */ public AlgaeShooterIOPB() { + super( + new SparkFlex(Constants.PracticeBotConstants.ALGAE_SHOOTER_FRONT_ID, MotorType.kBrushless), + new SparkFlex(Constants.PracticeBotConstants.ALGAE_SHOOTER_BACK_ID, MotorType.kBrushless) + ); + // TODO: add values final double kP = 0.0001; final double kI = 0.0; @@ -55,30 +48,4 @@ public AlgaeShooterIOPB() { algaeShooterMotorBack.configure( backConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); } - - public void updateInputs(AlgaeShooterIOInputs inputs) { - inputs.algaeShooterFrontVoltage = algaeShooterMotorFront.getBusVoltage(); - inputs.algaeShooterFrontPosition = algaeShooterMotorFront.getEncoder().getPosition(); - inputs.algaeShooterFrontVelocity = algaeShooterMotorFront.getEncoder().getVelocity(); - inputs.algaeShooterFrontCurrent = algaeShooterMotorFront.getOutputCurrent(); - inputs.algaeShooterFrontTemperature = algaeShooterMotorFront.getMotorTemperature(); - - inputs.algaeShooterBackVoltage = algaeShooterMotorBack.getBusVoltage(); - inputs.algaeShooterBackPosition = algaeShooterMotorBack.getEncoder().getPosition(); - inputs.algaeShooterBackVelocity = algaeShooterMotorBack.getEncoder().getVelocity(); - inputs.algaeShooterBackCurrent = algaeShooterMotorBack.getOutputCurrent(); - inputs.algaeShooterBackTemperature = algaeShooterMotorBack.getMotorTemperature(); - } - - public void setDutyCycle(double dutyCycle) { - algaeShooterMotorFront.set(dutyCycle); - } - - public void setVelocity(double velocity) { - algaeShooterMotorFront.getClosedLoopController().setReference(velocity, ControlType.kVelocity); - } - - public void stop() { - algaeShooterMotorFront.stopMotor(); - } } diff --git a/src/main/java/frc/robot/subsystems/AlgaeTilt/AlgaeTiltIOCB.java b/src/main/java/frc/robot/subsystems/AlgaeTilt/AlgaeTiltIOCB.java index 35c0b18..eca989f 100644 --- a/src/main/java/frc/robot/subsystems/AlgaeTilt/AlgaeTiltIOCB.java +++ b/src/main/java/frc/robot/subsystems/AlgaeTilt/AlgaeTiltIOCB.java @@ -16,31 +16,34 @@ import com.revrobotics.spark.config.EncoderConfig; import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; import com.revrobotics.spark.config.SparkMaxConfig; + import frc.robot.Constants; public class AlgaeTiltIOCB implements AlgaeTiltIO { - private final SparkMax motor = - new SparkMax(Constants.CompBotConstants.ALGAE_TILT, MotorType.kBrushless); - private final AbsoluteEncoder absEncoder = - motor.getAbsoluteEncoder(); // TODO: make absolute when we get one!! - // private final RelativeEncoder encoder = motor.getEncoder(); // TODO: make absolute when we get - // one!! + protected SparkMax motor; + protected AbsoluteEncoder absEncoder; + // private final RelativeEncoder encoder = motor.getEncoder(); // TODO: make absolute when we get one!! - private final double kP = 4; - private final double kI = 0.0; - private final double kD = 0.0; + protected double kP; + protected final double kI = 0.0; + protected final double kD = 0.0; - private final double forwardLimit = 38.0; - private final double reverseLimit = -10.0; + protected final double forwardLimit = 38.0; + protected final double reverseLimit = -10.0; - private final double ZERO_OFFSET = 0.7170253; + protected final double ZERO_OFFSET = 0.7170253; // 0.5551491; //0.7218491 + 0.833; - private final double positionConversionFactor = 1.0; - private final SparkMaxConfig sparkMaxConfig = new SparkMaxConfig(); + protected final double positionConversionFactor = 1.0; + protected final SparkMaxConfig sparkMaxConfig = new SparkMaxConfig(); /** Creates a new AlgaeIntakeIOPB. */ public AlgaeTiltIOCB() { + motor = new SparkMax(Constants.CompBotConstants.ALGAE_TILT, MotorType.kBrushless); + absEncoder = motor.getAbsoluteEncoder(); // TODO: make absolute when we get one!! + + kP = 4; + sparkMaxConfig.idleMode(IdleMode.kBrake); sparkMaxConfig.inverted(true); sparkMaxConfig.smartCurrentLimit(20, 5); @@ -94,10 +97,4 @@ public void updateInputs(AlgaeTiltIOInputs inputs) { inputs.armVelocityAbsolute = absEncoder.getVelocity(); inputs.armAmps = motor.getOutputCurrent(); } - - // @Override - // public void setEncoder(double value) { - // // TODO Auto-generated method stub - // throw new UnsupportedOperationException("Unimplemented method 'setEncoder'"); - // } } diff --git a/src/main/java/frc/robot/subsystems/AlgaeTilt/AlgaeTiltIOPB.java b/src/main/java/frc/robot/subsystems/AlgaeTilt/AlgaeTiltIOPB.java index 8827568..605a3f3 100644 --- a/src/main/java/frc/robot/subsystems/AlgaeTilt/AlgaeTiltIOPB.java +++ b/src/main/java/frc/robot/subsystems/AlgaeTilt/AlgaeTiltIOPB.java @@ -4,8 +4,7 @@ package frc.robot.subsystems.AlgaeTilt; -import com.revrobotics.AbsoluteEncoder; -import com.revrobotics.spark.SparkBase.ControlType; +import com.revrobotics.RelativeEncoder; import com.revrobotics.spark.SparkBase.PersistMode; import com.revrobotics.spark.SparkBase.ResetMode; import com.revrobotics.spark.SparkLowLevel.MotorType; @@ -14,29 +13,18 @@ import com.revrobotics.spark.config.ClosedLoopConfig; import com.revrobotics.spark.config.ClosedLoopConfig.FeedbackSensor; import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; -import com.revrobotics.spark.config.SparkMaxConfig; import frc.robot.Constants; -public class AlgaeTiltIOPB implements AlgaeTiltIO { - private final SparkMax motor = - new SparkMax(Constants.PracticeBotConstants.ALGAE_TILT, MotorType.kBrushless); - private final AbsoluteEncoder encoder = - motor.getAbsoluteEncoder(); // TODO: make absolute when we get one!! - - private final double kP = 4.0; - private final double kI = 0.0; - private final double kD = 0.0; - - private final double forwardLimit = 27.0; - private final double reverseLimit = -5.0; // used to be 10 3/15 - - private final double ZERO_OFFSET = 0.3735929; - - private final double positionConversionFactor = 1.0; - private final SparkMaxConfig sparkMaxConfig = new SparkMaxConfig(); +public class AlgaeTiltIOPB extends AlgaeTiltIOCB { + private final RelativeEncoder encoder = motor.getEncoder(); // TODO: make absolute when we get one!! /** Creates a new AlgaeIntakeIOPB. */ public AlgaeTiltIOPB() { + super(); + super.motor = new SparkMax(Constants.PracticeBotConstants.ALGAE_TILT, MotorType.kBrushless); + + super.kP = 0.035 * 2.0; + sparkMaxConfig.idleMode(IdleMode.kBrake); sparkMaxConfig.inverted(true); // USED TO BE FALSE 3/15 sparkMaxConfig.smartCurrentLimit(20, 5); @@ -58,23 +46,15 @@ public AlgaeTiltIOPB() { motor.configure(sparkMaxConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); } - public void setDutyCycle(double dutyCycle) { - motor.set(dutyCycle); - } - - public void setPosition(double position) { - motor.getClosedLoopController().setReference(position, ControlType.kPosition); + /** + * method for updating the encoder value + * + * @param value sets the new encoder value in rotations!! + */ + public void setEncoder(double value) { + encoder.setPosition(value); } - // /** - // * method for updating the encoder value - // * - // * @param value sets the new encoder value in rotations!! - // */ - // public void setEncoder(double value) { - // encoder.setPosition(value); - // } - public void updateInputs(AlgaeTiltIOInputs inputs) { inputs.armDutyCycle = motor.get(); inputs.armPositionRelative = encoder.getPosition(); diff --git a/src/main/java/frc/robot/subsystems/ClimberWinch/ClimberWinchIOCB.java b/src/main/java/frc/robot/subsystems/ClimberWinch/ClimberWinchIOCB.java index 8e20f61..06034f7 100644 --- a/src/main/java/frc/robot/subsystems/ClimberWinch/ClimberWinchIOCB.java +++ b/src/main/java/frc/robot/subsystems/ClimberWinch/ClimberWinchIOCB.java @@ -14,23 +14,26 @@ import com.revrobotics.spark.config.EncoderConfig; import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; import com.revrobotics.spark.config.SparkMaxConfig; + import frc.robot.Constants.CompBotConstants; public class ClimberWinchIOCB implements ClimberWinchIO { - private final SparkMax winchMotor = - new SparkMax(CompBotConstants.CLIMBER_WINCH_ID, MotorType.kBrushless); - private final RelativeEncoder winchEncoder = winchMotor.getEncoder(); - - private final double kP = 0.2; - private final double kI = 0.0; - private final double kD = 0.0; + protected SparkMax winchMotor; + protected RelativeEncoder winchEncoder; - private final double positionConversionFactor = 1.0; - private final SparkMaxConfig config = new SparkMaxConfig(); + protected final double kP = 0.2; + protected final double kI = 0.0; + protected final double kD = 0.0; + + protected final double positionConversionFactor = 1.0; + protected final SparkMaxConfig config = new SparkMaxConfig(); /** Creates a new ClimberIOPB. */ public ClimberWinchIOCB() { + winchMotor = new SparkMax(CompBotConstants.CLIMBER_WINCH_ID, MotorType.kBrushless); + winchEncoder = winchMotor.getEncoder(); + config.idleMode(IdleMode.kBrake); config.inverted(true); config.smartCurrentLimit(50); diff --git a/src/main/java/frc/robot/subsystems/ClimberWinch/ClimberWinchIOPB.java b/src/main/java/frc/robot/subsystems/ClimberWinch/ClimberWinchIOPB.java index a53cd29..3dce363 100644 --- a/src/main/java/frc/robot/subsystems/ClimberWinch/ClimberWinchIOPB.java +++ b/src/main/java/frc/robot/subsystems/ClimberWinch/ClimberWinchIOPB.java @@ -4,33 +4,24 @@ package frc.robot.subsystems.ClimberWinch; -import com.revrobotics.RelativeEncoder; -import com.revrobotics.spark.SparkBase.ControlType; -import com.revrobotics.spark.SparkBase.PersistMode; -import com.revrobotics.spark.SparkBase.ResetMode; import com.revrobotics.spark.SparkLowLevel.MotorType; -import com.revrobotics.spark.SparkMax; +import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; import com.revrobotics.spark.config.ClosedLoopConfig; import com.revrobotics.spark.config.EncoderConfig; -import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; -import com.revrobotics.spark.config.SparkMaxConfig; +import com.revrobotics.spark.SparkMax; +import com.revrobotics.spark.SparkBase.PersistMode; +import com.revrobotics.spark.SparkBase.ResetMode; import frc.robot.Constants.PracticeBotConstants; -public class ClimberWinchIOPB implements ClimberWinchIO { - - private final SparkMax winchMotor = - new SparkMax(PracticeBotConstants.CLIMBER_WINCH_ID, MotorType.kBrushless); - private final RelativeEncoder winchEncoder = winchMotor.getEncoder(); +public class ClimberWinchIOPB extends ClimberWinchIOCB { - private final double kP = 0.2; - private final double kI = 0.0; - private final double kD = 0.0; - - private final double positionConversionFactor = 1.0; - private final SparkMaxConfig config = new SparkMaxConfig(); /** Creates a new ClimberIOPB. */ public ClimberWinchIOPB() { + super(); + winchMotor = new SparkMax(PracticeBotConstants.CLIMBER_WINCH_ID, MotorType.kBrushless); + + config.idleMode(IdleMode.kBrake); config.inverted(true); ClosedLoopConfig closedLoopConfig = new ClosedLoopConfig(); @@ -41,20 +32,4 @@ public ClimberWinchIOPB() { config.apply(encoderConfig); winchMotor.configure(config, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); } - - public void setDutyCycle(double dutyCycle) { - winchMotor.set(dutyCycle); - } - - public void setPosition(double position) { - winchMotor.getClosedLoopController().setReference(position, ControlType.kPosition); - } - - public void updateInputs(ClimberWinchIOInputs inputs) { - inputs.winchDutyCycle = winchMotor.getAppliedOutput(); - inputs.winchPosition = winchEncoder.getPosition(); - inputs.winchVelocity = winchEncoder.getVelocity(); - inputs.winchCurrent = winchMotor.getOutputCurrent(); - inputs.winchTemp = winchMotor.getMotorTemperature(); - } -} +} \ No newline at end of file diff --git a/src/main/java/frc/robot/subsystems/CoralShooter/CoralShooterIOCB.java b/src/main/java/frc/robot/subsystems/CoralShooter/CoralShooterIOCB.java index 6b28715..5b20795 100644 --- a/src/main/java/frc/robot/subsystems/CoralShooter/CoralShooterIOCB.java +++ b/src/main/java/frc/robot/subsystems/CoralShooter/CoralShooterIOCB.java @@ -18,36 +18,48 @@ /** Add your docs here. */ public class CoralShooterIOCB implements CoralShooterIO { - private final SparkMax outtakeMotor = - new SparkMax(Constants.CompBotConstants.CORAL_SHOOTER_ID, MotorType.kBrushless); - - private final RelativeEncoder encoder = outtakeMotor.getEncoder(); - private final SparkMaxConfig sparkMaxConfig = new SparkMaxConfig(); - CANrangeConfiguration intakeConfig = new CANrangeConfiguration(); - CANrangeConfiguration outtakeConfig = new CANrangeConfiguration(); - - // private final Canandcolor intakeSensor = new - // Canandcolor(Constants.CompBotConstants.INTAKE_SENSOR_ID); - // private final Canandcolor outtakeSensor = new - // Canandcolor(Constants.CompBotConstants.OUTTAKE_SENSOR_ID); - - private final CANrange intakeSensor = - new CANrange( - Constants.CompBotConstants.INTAKE_SENSOR_ID, Constants.CompBotConstants.CANBUS_NAME); - private final CANrange outtakeSensor = - new CANrange( - Constants.CompBotConstants.OUTTAKE_SENSOR_ID, Constants.CompBotConstants.CANBUS_NAME); - + + protected SparkMax outtakeMotor; + protected RelativeEncoder encoder; + protected SparkMaxConfig sparkMaxConfig = new SparkMaxConfig(); + + private final CANrangeConfiguration intakeConfig; + private final CANrangeConfiguration outtakeConfig; + + private final CANrange intakeSensor; + private final CANrange outtakeSensor; + + protected final double KP = 0.0; + protected final double KI = 0.0; + protected final double KD = 0.0; + protected final double KF = 0.0; + + public CoralShooterIOCB() { + outtakeMotor = new SparkMax(Constants.CompBotConstants.CORAL_SHOOTER_ID, MotorType.kBrushless); + encoder = outtakeMotor.getEncoder(); + + intakeSensor = new CANrange(Constants.CompBotConstants.INTAKE_SENSOR_ID); + outtakeSensor = new CANrange(Constants.CompBotConstants.OUTTAKE_SENSOR_ID); + + intakeConfig = new CANrangeConfiguration(); + outtakeConfig = new CANrangeConfiguration(); + + sparkMaxConfig.idleMode(IdleMode.kBrake); + sparkMaxConfig.inverted(false); + outtakeMotor.configure(sparkMaxConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); + +/* Stated twice, this one is commented because it is private private final double KP = 0.0; private final double KI = 0.0; private final double KD = 0.0; private final double KF = 0.0; - - public CoralShooterIOCB() { - sparkMaxConfig.idleMode(IdleMode.kBrake); - sparkMaxConfig.inverted(false); - sparkMaxConfig.smartCurrentLimit(25, 5); - + */ +/* Commented because this method occurs twice (however they run different code!!) + protected boolean isInOuttakeSensor() { + return outtakeSensor.getProximity() < 0.1; + } +*/ + outtakeMotor.configure( sparkMaxConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); @@ -106,4 +118,4 @@ public void updateInputs(CoralShooterIOInputs inputs) { // inputs.intakeSensorProximity = intakeSensor.getProximity(); inputs.intakeSensorProximity = intakeSensor.getDistance().refresh().getValueAsDouble(); } -} +} \ No newline at end of file diff --git a/src/main/java/frc/robot/subsystems/CoralShooter/CoralShooterIOPB.java b/src/main/java/frc/robot/subsystems/CoralShooter/CoralShooterIOPB.java index 8474a8d..41089c6 100644 --- a/src/main/java/frc/robot/subsystems/CoralShooter/CoralShooterIOPB.java +++ b/src/main/java/frc/robot/subsystems/CoralShooter/CoralShooterIOPB.java @@ -5,64 +5,30 @@ package frc.robot.subsystems.CoralShooter; import com.reduxrobotics.sensors.canandcolor.Canandcolor; -import com.revrobotics.RelativeEncoder; +import com.revrobotics.spark.SparkMax; +import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; import com.revrobotics.spark.SparkBase.PersistMode; import com.revrobotics.spark.SparkBase.ResetMode; import com.revrobotics.spark.SparkLowLevel.MotorType; -import com.revrobotics.spark.SparkMax; -import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; -import com.revrobotics.spark.config.SparkMaxConfig; import frc.robot.Constants; /** Add your docs here. */ -public class CoralShooterIOPB implements CoralShooterIO { - - private final SparkMax outtakeMotor = - new SparkMax(Constants.PracticeBotConstants.CORAL_SHOOTER_ID, MotorType.kBrushless); - private final RelativeEncoder encoder = outtakeMotor.getEncoder(); - private final SparkMaxConfig sparkMaxConfig = new SparkMaxConfig(); - - private final Canandcolor intakeSensor = - new Canandcolor(Constants.PracticeBotConstants.INTAKE_SENSOR_ID); - private final Canandcolor outtakeSensor = - new Canandcolor(Constants.PracticeBotConstants.OUTTAKE_SENSOR_ID); - - private final double KP = 0.0; - private final double KI = 0.0; - private final double KD = 0.0; - private final double KF = 0.0; - - public CoralShooterIOPB() { - sparkMaxConfig.idleMode(IdleMode.kBrake); - sparkMaxConfig.inverted(false); - outtakeMotor.configure( - sparkMaxConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); - } - - public void setDutyCycle(double dutyCycle) { - outtakeMotor.set(dutyCycle); - } - - private boolean isInOuttakeSensor() { - return outtakeSensor.getProximity() < 0.2; // tuned for praccy bot 3/15 - } - - private boolean isInIntakeSensor() { - return intakeSensor.getProximity() < 0.2; - } - - public void stop() { - outtakeMotor.stopMotor(); - } - - public void updateInputs(CoralShooterIOInputs inputs) { - inputs.outtakeStatorCurrent = outtakeMotor.getOutputCurrent(); - inputs.outtakePosition = encoder.getPosition(); - inputs.outtakeVelocity = encoder.getVelocity(); - inputs.outtakeVoltage = outtakeMotor.getAppliedOutput() * outtakeMotor.getBusVoltage(); - inputs.outtakeSensor = this.isInOuttakeSensor(); - inputs.outtakeSensorProximity = outtakeSensor.getProximity(); - inputs.intakeSensor = this.isInIntakeSensor(); - inputs.intakeSensorProximity = intakeSensor.getProximity(); - } +public class CoralShooterIOPB extends CoralShooterIOCB { + private Canandcolor intakeSensor; + private Canandcolor outtakeSensor; + + public CoralShooterIOPB() { + super(); + outtakeMotor = new SparkMax(Constants.PracticeBotConstants.CORAL_SHOOTER_ID, MotorType.kBrushless); + intakeSensor = new Canandcolor(Constants.PracticeBotConstants.INTAKE_SENSOR_ID); + outtakeSensor = new Canandcolor(Constants.PracticeBotConstants.OUTTAKE_SENSOR_ID); + + sparkMaxConfig.idleMode(IdleMode.kBrake); + sparkMaxConfig.inverted(false); + outtakeMotor.configure(sparkMaxConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); + } + + private boolean isInIntakeSensor() { + return intakeSensor.getProximity() < 0.06; + } } diff --git a/src/main/java/frc/robot/subsystems/Elevator/ElevatorIOCB.java b/src/main/java/frc/robot/subsystems/Elevator/ElevatorIOCB.java index 6e62b5f..6cccb5b 100644 --- a/src/main/java/frc/robot/subsystems/Elevator/ElevatorIOCB.java +++ b/src/main/java/frc/robot/subsystems/Elevator/ElevatorIOCB.java @@ -21,24 +21,21 @@ /** Add your docs here. */ public class ElevatorIOCB implements ElevatorIO { - private final TalonFX backElevatorMotor = - new TalonFX(CompBotConstants.BACK_ELEVATOR_ID, CompBotConstants.CANBUS_NAME); - private final TalonFX frontElevatorMotor = - new TalonFX(CompBotConstants.FRONT_ELEVATOR_ID, CompBotConstants.CANBUS_NAME); + protected final TalonFX backElevatorMotor; + protected final TalonFX frontElevatorMotor; // private final DifferentialMechanism elevatorDiff; - private TalonFXConfiguration frontConfig = new TalonFXConfiguration(); - private TalonFXConfiguration backConfig = new TalonFXConfiguration(); - private MotorOutputConfigs outputConfigs = new MotorOutputConfigs(); + protected TalonFXConfiguration frontConfig = new TalonFXConfiguration(); + protected TalonFXConfiguration backConfig = new TalonFXConfiguration(); + protected MotorOutputConfigs outputConfigs = new MotorOutputConfigs(); // private DifferentialSensorsConfigs sens = backConfig.DifferentialSensors; - private final DigitalInput bottomSwitch = + protected final DigitalInput bottomSwitch = new DigitalInput(WoodbotConstants.ELEVATOR_BOTTOM_SWITCH); - private final double GEAR_RATIO = 1.0; - - public ElevatorIOCB() { - final double UPPER_LIMIT = 31.0; - final double LOWER_LIMIT = 0.0; + protected final double GEAR_RATIO = 1.0; + protected ElevatorIOCB(TalonFX backElevatorMotor, TalonFX frontElevatorMotor) { + this.backElevatorMotor = backElevatorMotor; + this.frontElevatorMotor = frontElevatorMotor; final double kA = 0.01; final double kD = 0.0; @@ -55,6 +52,13 @@ public ElevatorIOCB() { slot0Configs.kP = kP; slot0Configs.kS = kS; slot0Configs.kV = kV; + + } + public ElevatorIOCB() { + this( + new TalonFX(CompBotConstants.BACK_ELEVATOR_ID, CompBotConstants.CANBUS_NAME), + new TalonFX(CompBotConstants.FRONT_ELEVATOR_ID, CompBotConstants.CANBUS_NAME) + ); final double motionMagicCruiseVelocity = 800.0; final double motionMagicAcceleration = 350.0; // used to be 300 - jan 30 diff --git a/src/main/java/frc/robot/subsystems/Elevator/ElevatorIOPB.java b/src/main/java/frc/robot/subsystems/Elevator/ElevatorIOPB.java index 8ba1b71..1ae3314 100644 --- a/src/main/java/frc/robot/subsystems/Elevator/ElevatorIOPB.java +++ b/src/main/java/frc/robot/subsystems/Elevator/ElevatorIOPB.java @@ -20,42 +20,19 @@ import org.littletonrobotics.junction.Logger; /** Add your docs here. */ -public class ElevatorIOPB implements ElevatorIO { - private final TalonFX backElevatorMotor = - new TalonFX(PracticeBotConstants.BACK_ELEVATOR_ID, PracticeBotConstants.CANBUS_NAME); - private final TalonFX frontElevatorMotor = - new TalonFX(PracticeBotConstants.FRONT_ELEVATOR_ID, PracticeBotConstants.CANBUS_NAME); +public class ElevatorIOPB extends ElevatorIOCB { // private final DifferentialMechanism elevatorDiff; - private TalonFXConfiguration frontConfig = new TalonFXConfiguration(); - private TalonFXConfiguration backConfig = new TalonFXConfiguration(); - private MotorOutputConfigs outputConfigs = new MotorOutputConfigs(); // private DifferentialSensorsConfigs sens = backConfig.DifferentialSensors; - private final DigitalInput bottomSwitch = - new DigitalInput(WoodbotConstants.ELEVATOR_BOTTOM_SWITCH); - - private final double GEAR_RATIO = 1.0; - public ElevatorIOPB() { + super( + new TalonFX(PracticeBotConstants.BACK_ELEVATOR_ID, PracticeBotConstants.CANBUS_NAME), + new TalonFX(PracticeBotConstants.FRONT_ELEVATOR_ID, PracticeBotConstants.CANBUS_NAME) + ); + final double UPPER_LIMIT = 31.0; final double LOWER_LIMIT = 0.0; - final double kA = 0.01; - final double kD = 0.0; - final double kG = 0.3; - final double kI = 0.0; - final double kP = 5.0; // 5 original - final double kS = 0.01; - final double kV = 0.07; - Slot0Configs slot0Configs = backConfig.Slot0; - slot0Configs.kA = kA; - slot0Configs.kD = kD; - slot0Configs.kG = kG; - slot0Configs.kI = kI; - slot0Configs.kP = kP; - slot0Configs.kS = kS; - slot0Configs.kV = kV; - final double motionMagicCruiseVelocity = 800.0; final double motionMagicAcceleration = 350.0; // used to be 300 - jan 30 final double motionMagicCruiseJerk = 1500.0;