break;
}
- if (intake != null && hood != null)
- CommandScheduler.getInstance().schedule(new HardstopWarning(hood, intake));
+ if (intake != null && hood != null && turret != null)
+ CommandScheduler.getInstance().schedule(new HardstopWarning(hood, intake, turret));
// This is really annoying so it's disabled
DriverStation.silenceJoystickConnectionWarning(true);
import frc.robot.subsystems.Intake.Intake;
import frc.robot.subsystems.hood.Hood;
import frc.robot.subsystems.hood.HoodConstants;
+import frc.robot.subsystems.turret.Turret;
public class HardstopWarning extends Command {
private Hood hood;
private Intake intake;
+ private Turret turret;
+ private String turretStatus;
- public HardstopWarning(Hood hood, Intake intake) {
+ public HardstopWarning(Hood hood, Intake intake, Turret turret) {
this.hood = hood;
this.intake = intake;
+ this.turret = turret;
+ turretStatus = "Unknown";
}
@Override
double epsilon = 0.05;
SmartDashboard.putBoolean("Hood OK", hood.getPositionDeg() >= HoodConstants.MIN_ANGLE - epsilon);
SmartDashboard.putBoolean("Intake OK", intake.getPosition() >= IntakeConstants.STARTING_POINT - epsilon);
+
+ if (Math.abs(turret.getPositionRad()) <= epsilon) {
+ var encoderPositions = turret.getEncoderPositions();
+ if (Math.abs(encoderPositions.getFirst()) <= epsilon && Math.abs(encoderPositions.getSecond()) <= epsilon)
+ turretStatus = "Ok";
+ else
+ turretStatus = "Bad";
+ }
+
+ SmartDashboard.putString("Turret Status", turretStatus);
}
@Override
import com.ctre.phoenix6.sim.TalonFXSimState;
import edu.wpi.first.math.MathUtil;
+import edu.wpi.first.math.Pair;
import edu.wpi.first.math.filter.Debouncer;
-import edu.wpi.first.math.filter.LinearFilter;
import edu.wpi.first.math.filter.Debouncer.DebounceType;
+import edu.wpi.first.math.filter.LinearFilter;
import edu.wpi.first.math.geometry.Rotation2d;
import edu.wpi.first.math.util.Units;
import edu.wpi.first.wpilibj.RobotBase;
calibrating = false;
setFieldRelativeTarget(new Rotation2d(Units.degreesToRadians(TurretConstants.CALIBRATION_OFFSET)), 0.0);
}
+
+ // in rotations
+ public Pair<Double, Double> getEncoderPositions() {
+ return new Pair<Double, Double>(
+ encoderLeft.getAbsolutePosition().getValueAsDouble() - TurretConstants.LEFT_ENCODER_OFFSET,
+ encoderRight.getAbsolutePosition().getValueAsDouble() - TurretConstants.RIGHT_ENCODER_OFFSET);
+ }
}
public static int RIGHT_ENCODER_TEETH = 22; // read above
public static int ENCODER_COUNT_TOTAL = 8192; // how many intervals it can have, like clicks on a clock chat gpt explained to me
+ // TODO: set these properly
public static double LEFT_ENCODER_OFFSET = 0.364502; // rot
public static double RIGHT_ENCODER_OFFSET = 0.718506; // rot