1.
SetPosition() seems to work with my setup. If you're sensor is not quadrature be sure to select it using programming API. See section 7 in Talon SRX software reference manual. Tested with firm 1.1. What does the self-test say?
Code:
#include "WPILib.h"
class Robot: public IterativeRobot
{
private:
CANTalon _t1;
CANTalon _t2;
CANTalon _t3;
CANTalon _t4;
Joystick _j1;
bool _lastBtn1;
public:
Robot() : _t1(1),_t2(2),_t3(3),_t4(4),_j1(1), _lastBtn1(false)
{
}
void TeleopPeriodic()
{
float y = -1 * _j1.GetAxis(Joystick::kYAxis);
_t1.Set(y);
_t2.Set(y);
_t3.Set(y);
_t4.Set(y);
bool btn1 = _j1.GetRawButton(1);
if(btn1 && !_lastBtn1)
_t1.SetPosition(0);
_lastBtn1 = btn1;
long encPos = _t1.GetPosition();
{/* every 200ms */
static int loops = 0;
if(++loops>= (200/20) ){
loops = 0;
std::cout << "EncPos:" << encPos << std::endl;
}
}
}
};
START_ROBOT_CLASS(Robot);
2. The units are explained in section 17 in the Talon SRX software reference manual.