mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +00:00
Also added some references/smart pointers to a couple places that seemed convenient to the user. I haven't updated the constructors for RobotDrive() related examples, pending the results of gerrit change https://usfirst.collab.net/gerrit/#/c/960/ A few things that we are noticing: --It might be nice if ReturnPIDInput() didn't have to be const; when people try to override it, they have to remember to put the const in and if they don't, then the compiler error isn't the most obvious (especially since this is a change). This would also apply to PIDGet() in the PIDSource interface. --SendableChooser still takes raw pointers. This could lead to an issue I had to debug briefly where you accidentally call GetSelected() on autoChooser and put the resulting raw pointer into a unique_ptr, which destroys the pointer when it goes out of scope. Specifically, I was testing the PacGoat example and I ended up with a situation where if auto mode was run once, it was fine, but if it was run twice, the selected command would have been destroyed by the unique_ptr. I believe that this just requires updating SendableChosser to take shared_ptr. --When the samples are compiled with -pedantic, it points out that START_ROBOT_CLASS macro expansion results in a redundant semicolon. Change-Id: Ib4c025a61263d0d2780d4253faa31713e15333a5
45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
#include "WPILib.h"
|
|
|
|
/**
|
|
* This sample program shows how to control a motor using a joystick. In the operator
|
|
* control part of the program, the joystick is read and the value is written to the motor.
|
|
*
|
|
* Joystick analog values range from -1 to 1 and speed controller inputs as range from
|
|
* -1 to 1 making it easy to work together. The program also delays a short time in the loop
|
|
* to allow other threads to run. This is generally a good idea, especially since the joystick
|
|
* values are only transmitted from the Driver Station once every 20ms.
|
|
*/
|
|
class Robot : public SampleRobot {
|
|
Joystick m_stick;
|
|
|
|
// The motor to control with the Joystick.
|
|
// This uses a Talon speed controller; use the Victor or Jaguar classes for
|
|
// other speed controllers.
|
|
Talon m_motor;
|
|
|
|
// update every 0.005 seconds/5 milliseconds.
|
|
double kUpdatePeriod = 0.005;
|
|
|
|
public:
|
|
Robot() :
|
|
m_stick(0), // Initialize Joystick on port 0.
|
|
m_motor(0) // Initialize the Talon on channel 0.
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Runs the motor from the output of a Joystick.
|
|
*/
|
|
void OperatorControl() {
|
|
while (IsOperatorControl() && IsEnabled()) {
|
|
// Set the motor controller's output.
|
|
// This takes a number from -1 (100% speed in reverse) to +1 (100% speed forwards).
|
|
m_motor.Set(m_stick.GetY());
|
|
|
|
Wait(kUpdatePeriod); // Wait 5ms for the next update.
|
|
}
|
|
}
|
|
};
|
|
|
|
START_ROBOT_CLASS(Robot)
|