package swervelib.encoders; import edu.wpi.first.wpilibj.DriverStation; import edu.wpi.first.wpilibj.DutyCycleEncoder; /** * DutyCycle encoders such as "US Digital MA3 with PWM Output, the CTRE Mag Encoder, the Rev Hex Encoder, and the AM Mag * Encoder." attached via a PWM lane. *

* Credits to * * p2reneker25 for building this. */ public class PWMDutyCycleEncoderSwerve extends SwerveAbsoluteEncoder { /** * Duty Cycle Encoder. */ private final DutyCycleEncoder encoder; /** * Inversion state. */ private boolean isInverted; /** * Constructor for the PWM duty cycle encoder. * * @param pin PWM lane for the encoder. */ public PWMDutyCycleEncoderSwerve(int pin) { encoder = new DutyCycleEncoder(pin); } /** * Configure the inversion state of the encoder. * * @param inverted Whether the encoder is inverted. */ @Override public void configure(boolean inverted) { isInverted = inverted; } /** * Get the absolute position of the encoder. * * @return Absolute position in degrees from [0, 360). */ @Override public double getAbsolutePosition() { return (isInverted ? -1.0 : 1.0) * encoder.getAbsolutePosition() * 360; } /** * Get the encoder object. * * @return {@link DutyCycleEncoder} from the class. */ @Override public Object getAbsoluteEncoder() { return encoder; } /** * Get the velocity in degrees/sec. * * @return velocity in degrees/sec. */ @Override public double getVelocity() { DriverStation.reportWarning("The PWM Duty Cycle encoder may not report accurate velocities!", true); return encoder.get(); } /** * Reset the encoder to factory defaults. */ @Override public void factoryDefault() { // Do nothing } /** * Clear sticky faults on the encoder. */ @Override public void clearStickyFaults() { // Do nothing } }