Smart Dashboard

<< Simple Kenect Driver | FRC | Spike Coding >>

  1. Make a new project
  2. Select FRC-New CommandBasedRobot Template - call project name BroBot, other something you like--Package Name: org.usfirst.frc4101, Class name: Brobot
  3. In the first package. Use the OI to bind the operator input, and RoboMap to make physical connections to logical names
public class RobotMap{
     public static final int
         leftMotor=1,
         rightMotor=2;
}
  1. The second package has the CommandBase and all the Commands you write. When you make a new command, be sure to add it to the CommandBase
  2. The third package has our subsystems-- the hardware that is controlled by your Commands

Adding a subsystem

  1. rightclick on the third package which has our subsystems, and select New Subsystem (if that is not a choice, select Other, then find Subsystem
  2. Name it and press next. here is example Claw subsystem.
public class Claw extends Subsystem {
    // The claws motor
    Victor motor;

    // Initialize your subsystem here
    /**
     * Initialize the claw with the motor declared in {@link RobotMap}
     */
    public Claw() {
	super("Claw");
        motor = new Victor(RobotMap.clawMotor);
    }

    /**
     * Initialize the default command to be {@link ClawDoNothing}.
     */
    public void initDefaultCommand() {
        setDefaultCommand(new ClawDoNothing());
    }

    /**
     * Implements the claw's open capability. Simply tells the motor to move full
     * speed in one direction, it is the commands responsibility to tell it when
     * to stop opening. If the command doesn't, it will keep opening until the
     * command ends and the default command {@link ClawDoNothing} takes over.
     */
    public void open() {
        motor.set(1);
    }


    /**
     * Implements the claw's close capability. Simply tells the motor to move
     * full speed in one direction, it is the commands responsibility to tell it
     * when to stop closing. If the command doesn't, it will keep opening until
     * the command ends and the default command {@link ClawDoNothing} takes over.
     */
    public void close() {
        motor.set(-1);
    }

    /**
     * Implements the claw's do nothing capability. Simply tells the motor to
     * stop moving. After this is called the claw is neither opening or closing.
     */
    public void doNothing() {
        motor.set(0);
    }
}

To Make a new Command

  1. In CoomandBase add an import so it can find your new subsystem
 import edu.<your third package name>.brobot.subsystem.Claw

public static Claw claw = new Claw();
  1. Go to the second package where the Commands are, right-clcik and select "New Command" like ClawDoNothing
public class ClawDoNothing extends CommandBase {

    /**
     * Initialize the command so that it requires the claw. This means it will
     * be interrupted if another command requiring the claw is run.
     */
    public ClawDoNothing() {
        requires(claw);
    }

    // Called just before this Command runs the first time
    protected void initialize() {
    }

    // Called repeatedly when this Command is scheduled to run
    /**
     * Tells the claw to do nothing, stopping any previous movement.
     */
    protected void execute() {
        claw.doNothing();
    }

    // Make this return true when this Command no longer needs to run execute()
    /**
     * @return false, so that it executes forever or until another command
     *         interrupts it.
     */
    protected boolean isFinished() {
        return false;
    }

    // Called once after isFinished returns true
    protected void end() {
    }

    // Called when another command which requires one or more of the same
    // subsystems is scheduled to run
    protected void interrupted() {
    }
}

To bind the Command to a button

  1. Go to the first package and edit the OI class

Here is and example from the Gears Robot

public class OI {
    // Create the joystick and of the 8 buttons on it
    Joystick leftJoy = new Joystick(1);
    Button button1 = new JoystickButton(leftJoy, 1),
            button2 = new JoystickButton(leftJoy, 2),
            button3 = new JoystickButton(leftJoy, 3),
            button4 = new JoystickButton(leftJoy, 4),
            button5 = new JoystickButton(leftJoy, 5),
            button6 = new JoystickButton(leftJoy, 6),
            button7 = new JoystickButton(leftJoy, 7),
            button8 = new JoystickButton(leftJoy, 8);

    /**
     * Bind the press of each button to a specific command or command group.
     */
    public OI() {
        button1.whenPressed(new PrepareToGrab());
        button2.whenPressed(new Grab());


        button7.whenPressed(new SodaDelivery());
    }

    /**
     * @return The value of the left joystick.
     */
    public double getLeftSpeed() {
        return leftJoy.getY();
    }

    /**
     * @return The value of the right joystick. Note: this uses raw axis because
     *         we have a logitech joystick that resembles a PS controller.
     */
    public double getRightSpeed() {
        return leftJoy.getRawAxis(4);
    }
}


Watch the video