package org.team1540.valkyrie;
import ccre.behaviors.Behavior;
import ccre.behaviors.BehaviorArbitrator;
import ccre.behaviors.ArbitratedFloat;
import ccre.channel.BooleanCell;
import ccre.channel.BooleanInput;
import ccre.channel.FloatInput;
import ccre.channel.FloatOutput;
import ccre.cluck.Cluck;
import ccre.ctrl.binding.ControlBindingCreator;
import ccre.frc.FRC;
import ccre.recording.Recorder;
import ccre.verifier.SetupPhase;
public class DriveCode {
private static final ControlBindingCreator controls = FRC.controlBinding();
public static final BooleanCell disableMotorsForCurrentFault = new BooleanCell(false);
private static final BehaviorArbitrator driveControl = new BehaviorArbitrator("Drive Base").publish();
private static final ArbitratedFloat leftMotors = driveControl.addFloat(), rightMotors = driveControl.addFloat();
@SetupPhase
public static void setup(Recorder rc) {
rc.recordBehaviors(driveControl);
driveCode();
pitMode();
currentFault();
leftMotors.send(FloatOutput.combine(FRC.talon(4, FRC.MOTOR_FORWARD), FRC.talon(5, FRC.MOTOR_REVERSE), FRC.talon(6, FRC.MOTOR_FORWARD)));
rightMotors.send(FloatOutput.combine(FRC.talon(1, FRC.MOTOR_REVERSE), FRC.talon(2, FRC.MOTOR_REVERSE), FRC.talon(3, FRC.MOTOR_REVERSE)));
}
@SetupPhase
private static void driveCode() {
Behavior defaultBehavior = driveControl.addBehavior("Teleop", FRC.inTeleopMode());
BooleanInput shifted = controls.addToggleButton("Drive Shift Low", "Drive Shift High", "Drive Shift Toggle");
FloatInput shiftMul = shifted.toFloat(1.0f, 0.5f);
FloatInput triggerTerm = controls.addFloat("Drive Reverse").minus(controls.addFloat("Drive Forward"));
leftMotors.attach(defaultBehavior, controls.addFloat("Drive Left").multipliedBy(shiftMul).plus(triggerTerm));
rightMotors.attach(defaultBehavior, controls.addFloat("Drive Right").multipliedBy(shiftMul).plus(triggerTerm));
}
@SetupPhase
private static void pitMode() {
BooleanCell pitMode = new BooleanCell();
Cluck.publish("(PIT) Pit Mode", pitMode);
pitMode.setFalseWhen(FRC.startTele.and(FRC.isOnFMS()));
Behavior pitBehavior = driveControl.addBehavior("Pit Mode", pitMode);
leftMotors.attach(pitBehavior, FloatInput.zero);
rightMotors.attach(pitBehavior, FloatInput.zero);
}
@SetupPhase
private static void currentFault() {
Behavior disableBehavior = driveControl.addBehavior("Current Fault", disableMotorsForCurrentFault);
leftMotors.attach(disableBehavior, FloatInput.zero);
rightMotors.attach(disableBehavior, FloatInput.zero);
}
}