Thumbnail

Joystick (Xinput)

Joystick control for XInput devices (xbox controllers, etc).

+ How To Add This Control To Your Project (Click to Expand)
  1. Make sure you have the latest version of ARC installed.
  2. Select the Get button in this page to download the archive file.
  3. Double click the downloaded archive file to execute installer.
  4. The installer will add this control to ARC.
  5. Load ARC and press the Project -> Add Control button from the menu.
  6. Choose the Misc category tab.
  7. Press the Joystick (Xinput) icon to add the control to your project.

Manual

This is a Joystick skill for XInput devices (xbox controllers, etc). The advantage to this over the Direct Input joystick skill is that you have access to vibration hardware, and independent access to analog inputs. Analog inputs, such as the triggers can control servos or the vibration motors.

Main Window


User-inserted image


1. Device Drop-down
This drop down shows the Xinput devices that are available to be used by the Joystick Xinput Skill

2. Refresh Button
This button refreshes the devices listed in the Device drop-down. Whenever a new device is inserted into the computer you will have to press refresh to have it show up.

3. Status Field
This displays the status of the skill's connection to the Joystick Xinput controller.

Settings - Left Stick Tab


User-inserted image


1. Joystick #1 Controls Movement Panel Checkbox
This checkbox enables the left joystick #1 to control a movement panel. By default the D Pad has assigned scripts for calling forward(), reverse(), left(), right(), and stop() Movement Panel commands. However, the D Pad does not give you variable speed control, so you can enable the joystick to control movements with variable speed. If you use a variable speed on the joystick, you may wish to edit the scripts for the D Pad in the buttons tab.

2. servo Control
By default the left joystick#1 will control servos. This option is only available when the Joystick #1 Controls Movement Panel Checkbox is unchecked. This section allows you to setup servo movement parameters such as servo port, board index, servo configuration, max/min degree limitations, multiple servo control and inverted direction.

3. Movement Control Deadband Value Field
This option is only available when the left joystick #1 Controls Movement Panel Checkbox is enabled. This value controls the sensitivity of the joystick. The joystick values move in a range between -32768 and 32767. If the value is 800 the joystick must move to a value greater than +/- 800 from center for the joystick to respond. The lower the number the more sensitive the joystick will be.

Settings - Right Stick Tab


User-inserted image


1. Joystick #2 Controls Drone Up/Down/Roll Checkbox
This checkbox enables the right joystick #2 to control a Up/Down/Roll of the A.R. Drone movement panel. If unchecked the joystick will control the configured servos.

2. servo Control
By default the right joystick#2 will control servos. This option is only available when the joystick Controls Drone Checkbox is unchecked. This section allows you to setup servo movement parameters such as servo port, board index, servo configuration, max/min degree limitations, multiple servo control and inverted direction.

Settings - Triggers Tab


User-inserted image


1. servo Control
By default the left and right triggers will control servos. This section allows you to setup servo movement parameters such as servo port, board index, servo configuration, max/min degree limitations, multiple servo control and inverted direction. If servo control is not desired, don't configure them, and you can use the triggers for other tasks such as activating the vibration motors. See code sample below.

Settings - Buttons Tab


User-inserted image


1. Button Number Field
The buttons of joysticks can internally be labelled differently from one device to another, so we generically numbered them for you. To see what button corresponds to the script positions, simply push the button to see the respective row highlight in blue. 

2. Button Down Command Field
When a button is pressed down the script in the corresponding position will activate. 

3. Button Up Command Field
When a button is released the script in the corresponding position will activate.

Settings - Variables Tab


User-inserted image


1. Set EZ-Script Variables Checkbox
If this checkbox is enabled there will be variables assigned to the analog joystick positions. The analog joystick #1 (left) and #2 (right) will set variable values between -32768 and 32767. The analog triggers will set variable values between 0 and 255.

2. Variable Section
This section assigns the joystick and trigger values to customizable variable names. 

How to Use Joystick (XInput)


1) Add the Joystick (XInput) skill to your ARC project (Project -> Add Skill -> Misc -> Joystick (XInput) ).

2) Plug your wireless/wired joystick into one of PC's your USB ports (or connect via Bluetooth).

3) Find your Joystick in the Device drop-down and select it.

4) If you don't see your joystick listed, click the refresh button and try step 3 again. 

5) Once Status field reports that you are connected you can then enter the Settings and configure your Joystick. 

Code Sample


Vibration
The vibration of the joystick's left and right rumble motors can be enabled via controlCommand(). For example, to demonstrate variable control of the rumble motors with the finger triggers, add this JavaScript code to a script control and run it.

Code:


map = function (value, in_min, in_max, out_min, out_max) {

return (value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

while (true) {

var y1 = map(getVar("$JoystickX3"), 0, 255, 0, 100);

var y2 = map(getVar("$JoystickY3"), 0, 255, 0, 100);

ControlCommand("Joystick (XInput)", "VibrateLeftAndRight", y1, y2);

sleep(100);
}

Requirements


This control is not compatible with legacy Direct Input joysticks. For direct input joysticks, use the Joystick (DirectInput) found HERE. Some joysticks have a switch for change between Direct Input and XInput. Generally, the switch is labelled D or X. For this control, change the switch to X.

Resources


Here is a project which includes the script for testing the joystick xinput functions: test joystick.EZB