1313import edu .wpi .first .units .measure .AngularVelocity ;
1414import frc .robot .Constants ;
1515import frc .robot .Constants .HopperConstants ;
16+ import frc .robot .Constants .ShooterConstants ;
1617
1718public class HopperIOReal implements HopperIO {
1819
19- private final SparkFlex motor =
20- new SparkFlex (Constants .CanIDs .HOPPER_CAN_ID , MotorType .kBrushless );
20+ private final SparkFlex leadMotor =
21+ new SparkFlex (Constants .CanIDs .HOPPER_LEAD_CAN_ID , MotorType .kBrushless );
22+ private final SparkFlex followMotor =
23+ new SparkFlex (Constants .CanIDs .HOPPER_FOLLOW_CAN_ID , MotorType .kBrushless );
2124 private SparkFlexConfig config = Constants .ElevatorConstants .MOTOR_CONFIG ();
2225
23- private final RelativeEncoder encoder = motor .getEncoder ();
26+ private final RelativeEncoder encoder = leadMotor .getEncoder ();
27+
28+ private final SparkFlexConfig followConfig = new SparkFlexConfig ();
2429
2530 // private final VL6180 timeOfFlight = new VL6180(Port.kOnboard);
2631
32+ public HopperIOReal (){
33+ followConfig .follow (leadMotor , ShooterConstants .FOLLOW_INVERT );
34+ followMotor .configure (
35+ followConfig , ResetMode .kResetSafeParameters , PersistMode .kPersistParameters );
36+ }
37+
2738 @ Override
2839 public void updateInputs (HopperInputs inputs ) {
2940 inputs .velocityRPM = encoder .getVelocity ();
30- inputs .appliedOutput = motor .getAppliedOutput ();
31- inputs .currentAmps = motor .getOutputCurrent ();
32- inputs .tempCelsius = motor .getMotorTemperature ();
41+ inputs .appliedOutput = leadMotor .getAppliedOutput ();
42+ inputs .currentAmps = leadMotor .getOutputCurrent ();
43+ inputs .tempCelsius = leadMotor .getMotorTemperature ();
3344 // inputs.tofDistanceInches = timeOfFlight.getDistance().in(Units.Inches);
3445 }
3546
3647 @ Override
3748 public void setVoltage (double volts ) {
38- motor .setVoltage (volts );
49+ leadMotor .setVoltage (volts );
3950 }
4051
4152 @ Override
4253 public void setVel (AngularVelocity angle ) {
43- motor
54+ leadMotor
4455 .getClosedLoopController ()
4556 .setReference (
4657 angle .in (Units .RPM ) / HopperConstants .GEAR_RATIO ,
@@ -51,13 +62,15 @@ public void setVel(AngularVelocity angle) {
5162 public void configMotor (double kV , double kP , double maxAcceleration ) {
5263 config .closedLoop .pidf (kP , 0 , 0 , kV );
5364 config .closedLoop .maxMotion .maxAcceleration (maxAcceleration );
54- motor .configure (config , ResetMode .kResetSafeParameters , PersistMode .kPersistParameters );
65+ leadMotor .configure (config , ResetMode .kResetSafeParameters , PersistMode .kPersistParameters );
5566 }
5667
5768 @ Override
5869 public boolean setIdleMode (IdleMode value ) {
5970 config .idleMode (value );
60- return motor .configure (config , ResetMode .kResetSafeParameters , PersistMode .kPersistParameters )
71+ followConfig .idleMode (value );
72+ return leadMotor .configure (config , ResetMode .kResetSafeParameters , PersistMode .kPersistParameters )
73+ == REVLibError .kOk && followMotor .configure (followConfig , ResetMode .kResetSafeParameters , PersistMode .kPersistParameters )
6174 == REVLibError .kOk ;
6275 }
6376}
0 commit comments