Can't read joystick values in Java

Our team is trying to implement a simple mecanum drive in Java, but whenever we try to set a motor speed based on a joystick value, the motor simply does nothing. No error is thrown, but it does not spin.

We are extending the SimpleRobot class. We are initializing the joysticks with:


private Joystick leftStick;

public RobotTemplate() {
leftStick = new Joystick(1);

and then later on…


drivetrain.tankDrive(leftStick, rightStick);

//or

leftMotor.set(leftStick.getX());

We just switched from C++ to Java and we were able to use the joysticks fine in our C++ program, so we don’t think it’s a control system issue.

Any help would be greatly appreciated! Thanks.

The getX() method is for the kinectStick. Use getRawAxis(int axis) or getAxis(Joystick.AxisType.kX);

Thank you for your fast reply. I tried switching to using the getRawAxis method, but it still does the same thing. I try:


// I also try 1-6 instead of 0
leftMotor.set(leftDriveStick.getRawAxis(0));

When I put in 3, the motor drives at full speed, but for everything else it does not drive at all. In either case, I can’t control them with the joysticks. Am I missing something else?

Try two things: firstly, output your values using the LCD display class; it helps a ton. Also, try the getAxis, as it has an enum instead of the index. Instead of some arbitrary number as an argument, it uses Joystick.AxisType.kX

I managed to find the default code project that was missing from the libraries on a different thread, and when I ran that, it worked. I still do not know what the root issue is but maybe I will be able to determine it in the future.

Thank you for your help.

No, getX() is inherited in both Joystick and kinectStick from GenericHID.

Look in the libraries at Joystick.java and you’ll find


/**
     * Get the X value of the joystick.
     * This depends on the mapping of the joystick connected to the current port.
     *
     * @param hand Unused
     * @return The X value of the joystick.
     */
    public double getX(Hand hand) {
        return getRawAxis(m_axes[AxisType.kX.value]);
    }

    /**
     * Get the Y value of the joystick.
     * This depends on the mapping of the joystick connected to the current port.
     *
     * @param hand Unused
     * @return The Y value of the joystick.
     */
    public double getY(Hand hand) {
        return getRawAxis(m_axes[AxisType.kY.value]);
    }

TL;DR getX() works for joysticks, not just kinectSticks.