Creating your Benchtop Test Program
This article describes the Benchtop test example program
Creating a project
Create a new Getting Started Example project. For more info about creating projects, see Creating a robot program.
Our code needs to reference the components of WPILib that are used. In C++ this is accomplished using "#include" statements, in Java it is done with "import" statements. The program references classes for Joystick (for driving), PWMVictorSPX (for controlling motors), TimedRobot (the base class used for the example), Timer (used for autonomous), DifferentialDrive (for connecting the joystick control to the motors), and LiveWindow (C++ only).
Defining the variables for our sample robot
The sample robot in our examples will have a joystick on USB port 0 for arcade drive and two motors on PWM ports 0 and 1. Here we create objects of type DifferentialDrive (m_robotDrive), Joystick (m_stick) and time (m_timer). This section of the code does three things:
- Defines the variables as members of our Robot class.
- Initializes the variables.
Note: The variable initializations for C++ are in the "private" section at the bottom of the program. This means they are private to the class (Robot). The C++ code also sets the Motor Safety expiration to 0.1 seconds (the drive will shut off if we don't give it a command every .1 seconds and starts the timer used for autonomous.
The RobotInit method is run when the robot program is starting up, but after the constructor. The RobotInit for our sample program gets a pointer to the LiveWindow instance (this is used in the test method discussed below). This method is omitted from the code, meaning the default version will be run (if we wanted to run something here we could provide the code above to override the default).
Simple autonomous sample
The AutonomousInit method is run once each time the robot transitions to autonomous from another mode. In this program, we reset the timer and then start it in this method.
AutonomousPeriodic is run once every period while the robot is in autonomous mode. In the TimedRobot class the period is a fixed time, which defaults to 20ms. In this example, the periodic code checks if the timer is less than 2 seconds and if so, drives forward at half speed using the ArcadeDrive method of the DifferentialDrive class. The value is negative for forward motion because of the convention for joysticks where a negative Y-axis value corresponds to moving the stick away from you (forward). If more than 2 seconds has elapsed, the code stops the robot drive.
Joystick Control for teleoperation
Like in Autonomous, the Teleop mode has a TeleopInit and TeleopPeriodic function. In this example we don't have anything to do in TeleopInit, it is provided for illustration purposes only. In Teleop Periodic, the code uses the ArcadeDrive method to map the Y-axis of the joystick to forward/back motion of the drive motors and the X-axis to turning motion.
Test Mode is used for testing robot functionality. Similar to TeleopInit, the TestPeriodic is provided here for example.
To learn about running this program on the roboRIO see the next article.