77
88package frc .robot .subsystems .drive ;
99
10+ import static edu .wpi .first .units .Units .Degree ;
11+ import static edu .wpi .first .units .Units .Radians ;
1012import static frc .robot .subsystems .drive .DriveConstants .*;
1113import static frc .robot .util .SparkUtil .*;
1214
1921import com .revrobotics .spark .SparkBase .ControlType ;
2022import com .revrobotics .spark .SparkClosedLoopController ;
2123import com .revrobotics .spark .SparkClosedLoopController .ArbFFUnits ;
22- import com .revrobotics .spark .SparkFlex ;
2324import com .revrobotics .spark .SparkLowLevel .MotorType ;
2425import com .revrobotics .spark .SparkMax ;
2526import com .revrobotics .spark .config .SparkBaseConfig .IdleMode ;
26- import com .revrobotics .spark .config .SparkFlexConfig ;
2727import com .revrobotics .spark .config .SparkMaxConfig ;
2828import edu .wpi .first .math .MathUtil ;
2929import edu .wpi .first .math .filter .Debouncer ;
@@ -43,7 +43,9 @@ public class ModuleIOSpark implements ModuleIO {
4343 private final SparkBase driveSpark ;
4444 private final SparkBase turnSpark ;
4545 private final RelativeEncoder driveEncoder ;
46- private final AnalogEncoder turnEncoder ;
46+ private final RelativeEncoder turnEncoder ;
47+
48+ private final AnalogEncoder absoluteEncoder ; // MODIFIED
4749
4850 // Closed loop controllers
4951 private final SparkClosedLoopController driveController ;
@@ -70,7 +72,7 @@ public ModuleIOSpark(int module) {
7072 default -> Rotation2d .kZero ;
7173 };
7274 driveSpark =
73- new SparkFlex (
75+ new SparkMax (
7476 switch (module ) {
7577 case 0 -> frontLeftDriveCanId ;
7678 case 1 -> frontRightDriveCanId ;
@@ -90,33 +92,23 @@ public ModuleIOSpark(int module) {
9092 },
9193 MotorType .kBrushless );
9294 driveEncoder = driveSpark .getEncoder ();
93- // turnEncoder = turnSpark.getAbsoluteEncoder ();
95+ turnEncoder = turnSpark .getEncoder ();
9496
95- // # BEGIN CUSTOMIZED CODE:
96- switch (module ) {
97- case 0 :
98- turnEncoder = new AnalogEncoder (0 );
99- break ;
100- case 1 :
101- turnEncoder = new AnalogEncoder (1 );
102- break ;
103- case 2 :
104- turnEncoder = new AnalogEncoder (3 );
105- break ;
106- case 3 :
107- turnEncoder = new AnalogEncoder (2 );
108- break ;
109- default :
110- turnEncoder = new AnalogEncoder (5 );
111- }
112-
113- // # END CUSTOMIZED CODE.
97+ absoluteEncoder =
98+ new AnalogEncoder (
99+ switch (module ) {
100+ case 0 -> frontLeftAbsoluteEncoderChannel ;
101+ case 1 -> frontRightAbsoluteEncoderChannel ;
102+ case 2 -> backLeftAbsoluteEncoderChannel ;
103+ case 3 -> backRightAbsoluteEncoderChannel ;
104+ default -> 0 ;
105+ });
114106
115107 driveController = driveSpark .getClosedLoopController ();
116108 turnController = turnSpark .getClosedLoopController ();
117109
118110 // Configure drive motor
119- var driveConfig = new SparkFlexConfig ();
111+ var driveConfig = new SparkMaxConfig ();
120112 driveConfig
121113 .idleMode (IdleMode .kBrake )
122114 .smartCurrentLimit (driveMotorCurrentLimit )
@@ -156,23 +148,23 @@ public ModuleIOSpark(int module) {
156148 .smartCurrentLimit (turnMotorCurrentLimit )
157149 .voltageCompensation (12.0 );
158150 turnConfig
159- .absoluteEncoder
160- .inverted (turnEncoderInverted )
151+ .encoder
152+ // .inverted(turnEncoderInverted)
161153 .positionConversionFactor (turnEncoderPositionFactor )
162154 .velocityConversionFactor (turnEncoderVelocityFactor )
163- .averageDepth (2 );
155+ .uvwAverageDepth (2 );
164156 turnConfig
165157 .closedLoop
166- .feedbackSensor (FeedbackSensor .kAbsoluteEncoder )
158+ .feedbackSensor (FeedbackSensor .kPrimaryEncoder )
167159 .positionWrappingEnabled (true )
168160 .positionWrappingInputRange (turnPIDMinInput , turnPIDMaxInput )
169161 .pid (turnKp , 0.0 , turnKd );
170162 turnConfig
171163 .signals
172- .absoluteEncoderPositionAlwaysOn (true )
173- .absoluteEncoderPositionPeriodMs ((int ) (1000.0 / odometryFrequency ))
174- .absoluteEncoderVelocityAlwaysOn (true )
175- .absoluteEncoderVelocityPeriodMs (20 )
164+ .primaryEncoderPositionAlwaysOn (true )
165+ .primaryEncoderPositionPeriodMs ((int ) (1000.0 / odometryFrequency ))
166+ .primaryEncoderVelocityAlwaysOn (true )
167+ .primaryEncoderVelocityPeriodMs (20 )
176168 .appliedOutputPeriodMs (20 )
177169 .busVoltagePeriodMs (20 )
178170 .outputCurrentPeriodMs (20 );
@@ -183,12 +175,16 @@ public ModuleIOSpark(int module) {
183175 turnSpark .configure (
184176 turnConfig , ResetMode .kResetSafeParameters , PersistMode .kPersistParameters ));
185177
178+ tryUntilOk (
179+ turnSpark ,
180+ 5 ,
181+ () -> turnEncoder .setPosition (Radians .convertFrom (absoluteEncoder .get () * 360 , Degree )));
186182 // Create odometry queues
187183 timestampQueue = SparkOdometryThread .getInstance ().makeTimestampQueue ();
188184 drivePositionQueue =
189185 SparkOdometryThread .getInstance ().registerSignal (driveSpark , driveEncoder ::getPosition );
190186 turnPositionQueue =
191- SparkOdometryThread .getInstance ().registerSignal (turnSpark , turnEncoder ::get );
187+ SparkOdometryThread .getInstance ().registerSignal (turnSpark , turnEncoder ::getPosition );
192188 //// MODIFIED
193189 }
194190
@@ -209,10 +205,9 @@ public void updateInputs(ModuleIOInputs inputs) {
209205 sparkStickyFault = false ;
210206 ifOk (
211207 turnSpark ,
212- turnEncoder ::get , // MODIFIED
208+ turnEncoder ::getPosition ,
213209 (value ) -> inputs .turnPosition = new Rotation2d (value ).minus (zeroRotation ));
214- // ifOk(turnSpark, turnEncoder::get, (value) -> inputs.turnVelocityRadPerSec = value); REMOVED
215- // DUE TO NON-EXISTANT METHOD
210+ ifOk (turnSpark , turnEncoder ::getVelocity , (value ) -> inputs .turnVelocityRadPerSec = value );
216211 ifOk (
217212 turnSpark ,
218213 new DoubleSupplier [] {turnSpark ::getAppliedOutput , turnSpark ::getBusVoltage },
0 commit comments