-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTransferSubsystem.java
More file actions
111 lines (96 loc) · 3.58 KB
/
TransferSubsystem.java
File metadata and controls
111 lines (96 loc) · 3.58 KB
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
package frc.robot.subsystems;
import com.revrobotics.spark.SparkBase.ControlType;
import com.revrobotics.spark.SparkLowLevel.MotorType;
import com.ctre.phoenix6.controls.VelocityVoltage;
import com.ctre.phoenix6.hardware.TalonFX;
import com.revrobotics.PersistMode;
import com.revrobotics.ResetMode;
import com.revrobotics.spark.SparkMax;
import com.revrobotics.spark.config.SparkBaseConfig.IdleMode;
import com.revrobotics.spark.config.SparkMaxConfig;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
import edu.wpi.first.wpilibj2.command.Command;
import edu.wpi.first.wpilibj2.command.InstantCommand;
import edu.wpi.first.wpilibj2.command.SubsystemBase;
import frc.robot.Configs;
import frc.robot.Constants;
/**
* Subsystem responsible for controlling the transfer mechanism.
*
* <p>The transfer moves game pieces between internal subsystems
* (e.g. intake → shooter). It is velocity-controlled using a
* closed-loop controller on a Spark MAX.</p>
*/
public class TransferSubsystem extends SubsystemBase {
// --------------------------------------------------------------------
// Hardware
// --------------------------------------------------------------------
/** Motor driving the transfer mechanism. */
private final TalonFX kickerMotor;
private final TalonFX feederMotor;
// --------------------------------------------------------------------
// Construction / Configuration
// --------------------------------------------------------------------
/**
* Creates and configures the transfer subsystem.
*/
public TransferSubsystem() {
kickerMotor = new TalonFX(Constants.Transfer.TRANSFER_KICKER_ID, Constants.CANIVORE_LOOP_NAME);
kickerMotor.getConfigurator().apply(Configs.KICKER_CONFIG);
feederMotor = new TalonFX(Constants.Transfer.TRANSFER_FEEDER_ID);
feederMotor.getConfigurator().apply(Configs.FEEDER_CONFIG);
}
// --------------------------------------------------------------------
// Control
// --------------------------------------------------------------------
/**
* Commands the transfer motor to a target power.
*
* @param power desired power
*/
public void setKickerPower(double power) {
kickerMotor.set(power);
}
public void setFeederPower(double power) {
feederMotor.set(power);
}
// --------------------------------------------------------------------
// Commands
// --------------------------------------------------------------------
/**
* Creates a command that immediately sets the transfer power.
*
* <p>This command finishes instantly and leaves the motor
* running at the requested speed.</p>
*
* @param power desired transfer power
* @return an instant command that sets motor power
*/
public Command getPowerCommand(double kickerPower, double feederPower) {
return new InstantCommand(
() -> {
setKickerPower(kickerPower);
setFeederPower(feederPower);
}
);
}
public Command getLoadCommand() {
return new InstantCommand(
() -> {
setKickerPower(Constants.Transfer.KICKER_LOAD_POWER);
setFeederPower(Constants.Transfer.FEEDER_LOAD_POWER);
}
);
}
/**
* @return a command that stops the transfer motor
*/
public Command getStopCommand() {
return new InstantCommand(
() -> {
kickerMotor.stopMotor();
feederMotor.stopMotor();
}
);
}
}