You can also write C programs with the WPI Robotics Library using a set of C functions that map on top of the C++ classes and methods. To write C code:
• You need to create .cpp (C++ files) rather than .C files because the C wrapper functions take
advantage of overloaded functions. This means that there are a number of functions that have
the same name, but different argument lists. This increases the compatibility with the C++
programming interfaces and will make transition to C++ much easier if you choose to do that.
• Specify port and/or slot (module) numbers in most of the functions. Behind the scenes, the
functions allocate C++ objects that correspond to the functions that you are using. This serves
two purposes: it ensures that you are not using a particular port for two purposes accidently
since the C++ underlying functions track “reservations” and makes the code very similar to
previous years where the port numbers were on each call.
You will find that there are a few C++ higher level code options that do not exist in C, it is a lower level
interface to the hardware connected to the cRIO and the driver station.
Sensors are automatically allocated when they are first used on a particular channel. Suppose you start
using a Victor on port 5. On the first use, an object is created behind the scenes that corresponds to that
motor. Each time you refer that that Victor object on port 5, the code calls the underlying object to set
or get values. When you are finished using an object, you may delete it by calling the Delete function
associated with the object, for example DeleteVictor(). This is usually not necessary because it is unlikely
that you would ever need to delete a sensor once it is created. Those functions mostly exist for testing.
Example of a C program
The following C program demonstrates driving the robot for 2 seconds forward in Autonomous and in arcade mode for the Operator Control period. Notice that constants define the port numbers used in the program. This is a good practice and should be used for C and C++ programs.
#include "WPILib.h"
#include "SimpleCRobot.h"
static const UINT32 LEFT_MOTOR_PORT = 1;
static const UINT32 RIGHT_MOTOR_PORT = 2;
static const UINT32 JOYSTICK_PORT = 1;
void Initialize(void)
{
CreateRobotDrive(LEFT_MOTOR_PORT, RIGHT_MOTOR_PORT);
SetWatchdogExpiration(0.1);
}
void Autonomous(void)
{
SetWatchdogEnabled(false);
Drive(0.5, 0.0);
Wait(2.0);
Drive(0.0, 0.0);
}
void OperatorControl(void)
{
SetWatchdogEnabled(true);
while (IsOperatorControl())
{
WatchdogFeed();
ArcadeDrive(JOYSTICK_PORT);
}
}
START_ROBOT_CLASS(SimpleCRobot);