mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
64 lines
2.5 KiB
C++
64 lines
2.5 KiB
C++
#include "WPILib.h"
|
|
|
|
/**
|
|
* This is a quick sample program to show how to use the new Talon SRX over CAN.
|
|
* This particular sample demonstrates running a basic PID control loop with an
|
|
* analog potentiometer.
|
|
*
|
|
*/
|
|
class Robot : public SampleRobot {
|
|
CANTalon m_motor;
|
|
|
|
public:
|
|
Robot()
|
|
: m_motor(1) // Initialize the Talon as device 1. Use the roboRIO web
|
|
// interface to change the device number on the m_motors.
|
|
{
|
|
// This sets the mode of the m_motor. The options are:
|
|
// kPercentVbus: basic throttle; no closed-loop.
|
|
// kCurrent: Runs the motor with the specified current if possible.
|
|
// kSpeed: Runs a PID control loop to keep the motor going at a constant
|
|
// speed using the specified sensor.
|
|
// kPosition: Runs a PID control loop to move the motor to a specified move
|
|
// the motor to a specified sensor position.
|
|
// kVoltage: Runs the m_motor at a constant voltage, if possible.
|
|
// kFollower: The m_motor will run at the same throttle as the specified other talon.
|
|
m_motor.SetControlMode(CANSpeedController::kPosition);
|
|
// This command allows you to specify which feedback device to use when doing
|
|
// closed-loop control. The options are:
|
|
// AnalogPot: Basic analog potentiometer
|
|
// QuadEncoder: Quadrature Encoder
|
|
// AnalogEncoder: Analog Encoder
|
|
// EncRising: Counts the rising edges of the QuadA pin (allows use of a
|
|
// non-quadrature encoder)
|
|
// EncFalling: Same as EncRising, but counts on falling edges.
|
|
m_motor.SetFeedbackDevice(CANTalon::AnalogPot);
|
|
// This sets the basic P, I , and D values (F, Izone, and rampRate can also
|
|
// be set, but are ignored here).
|
|
// These must all be positive floating point numbers (SetSensorDirection will
|
|
// multiply the sensor values by negative one in case your sensor is flipped
|
|
// relative to your motor).
|
|
// These values are in units of throttle / sensor_units where throttle ranges
|
|
// from -1023 to +1023 and sensor units are from 0 - 1023 for analog
|
|
// potentiometers, encoder ticks for encoders, and position / 10ms for
|
|
// speeds.
|
|
m_motor.SetPID(1.0, 0.0, 0.0);
|
|
}
|
|
|
|
/**
|
|
* Runs the motor from the output of a Joystick.
|
|
*/
|
|
void OperatorControl() {
|
|
while (IsOperatorControl() && IsEnabled()) {
|
|
// In closed loop mode, this sets the goal in the units mentioned above.
|
|
// Since we are using an analog potentiometer, this will try to go to
|
|
// the middle of the potentiometer range.
|
|
m_motor.Set(512);
|
|
|
|
Wait(5.0);
|
|
}
|
|
}
|
|
};
|
|
|
|
START_ROBOT_CLASS(Robot);
|