-
Notifications
You must be signed in to change notification settings - Fork 226
/
Copy pathPWMDutyCycleEncoderSwerve.java
118 lines (105 loc) · 2.54 KB
/
PWMDutyCycleEncoderSwerve.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package swervelib.encoders;
import edu.wpi.first.wpilibj.DutyCycleEncoder;
import swervelib.telemetry.Alert;
/**
* 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.
* <p>
* Credits to
* <a href="https://github.com/p2reneker25/2035-YAGSL/blob/main/swervelib/encoders/PWMDutyCycleEncoderSwerve.java">
* p2reneker25</a> for building this.
*/
public class PWMDutyCycleEncoderSwerve extends SwerveAbsoluteEncoder
{
/**
* Duty Cycle Encoder.
*/
private final DutyCycleEncoder encoder;
/**
* Inversion state.
*/
private boolean isInverted;
/** An {@link Alert} for if the encoder cannot report accurate velocities. */
private Alert inaccurateVelocities = new Alert(
"Encoders",
"The PWM Duty Cycle encoder may not report accurate velocities!",
Alert.AlertType.WARNING_TRACE);
/**
* 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()
{
inaccurateVelocities.set(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
}
/**
* Sets the offset of the Encoder in the WPILib Encoder Library.
*
* @param offset the offset the Absolute Encoder uses as the zero point.
* @return Always true due to no external device commands.
*/
@Override
public boolean setAbsoluteEncoderOffset(double offset)
{
encoder.setPositionOffset(offset);
return true;
}
}