Sneak Peak at ATAlibj

Hey guys,

Just thought I’d give you a sneak peak at what production code will look like with the API we on team 4334 are working on. We will release it this summer, so be on the lookout!


public class Drivetrain extends Subsystem {

    private final RobotDriveModule driveModule;
    private final XboxController controller;
    private final SpikeRelayModule compressor;
    private final SolenoidModule left1, left2, right1, right2;

    public Drivetrain(RobotDriveModule driveModule, XboxController controller,
            SpikeRelayModule compressor, SolenoidModule left1, SolenoidModule left2,
            SolenoidModule right1, SolenoidModule right2) {
        super(new Module]{driveModule, controller, compressor, left1, left2, right1, right2});
        this.driveModule = driveModule;
        this.controller = controller;
        this.compressor = compressor;
        this.left1 = left1;
        this.left2 = left2;
        this.right1 = right1;
        this.right2 = right2;
        init();
    }

    private void init() {
        controller.bindAxis(XboxController.RIGHT_FROM_MIDDLE, new SideBinding(driveModule, SideBinding.RIGHT));
        controller.bindAxis(XboxController.LEFT_FROM_MIDDLE, new SideBinding(driveModule, SideBinding.LEFT));
        controller.bindWhenPressed(XboxController.RIGHT_BUMPER, new Command() {
            public void run() {
                if(left1.get() && right1.get()) {
                    left1.set(false);
                    left2.set(true);
                    right1.set(false);
                    right2.set(true);
                } else {
                    left1.set(true);
                    left2.set(false);
                    right1.set(true);
                    right2.set(false);
                }
            }
        });
    }
    
    public void teleop() {
        compressor.set(SpikeRelay.FORWARD);
        controller.doBinds();
    }
}

If you didn’t catch on, there is joystick bindings, modules, subsystems and custom wrapper classes for a lot of the wpilibj classes. This code controls a supershifter gear shifting robot. Notice that to control the drivetrain, final code is 2 lines long.

That’s pretty cool. Also, it seems organized which is a huge advantage.