package
1.15.0
Repository: https://github.com/mike1808/gobot.git
Documentation: pkg.go.dev

# README

Joystick

You can use Gobot with any USB joystick or game controller that is compatible with Simple DirectMedia Layer.

Current configurations included:

  • Dualshock3 game controller
  • Dualshock4 game controller
  • Thrustmaster T-Flight Hotas X Joystick
  • XBox360 game controller
  • XBox360 "Rock Band" drum controller

How to Install

This package requires sdl2 to be installed on your system

macOS

To install sdl2 on macOS using Homebrew:

$ brew install sdl2

To use an XBox360 controller on macOS, you will most likely need to install additional software such as https://github.com/360Controller/360Controller.

Linux (Ubuntu and Raspbian)

You must be running a Linux kernel that is v4.14+ in order for the various controller mappings to work as expected.

Then you must install the latest SDL2 v2.0.8 or greater:

wget https://www.libsdl.org/release/SDL2-2.0.8.tar.gz
tar -zxvf SDL2-2.0.8.tar.gz
cd SDL2-2.0.8/
./configure && make && sudo make install

Now you can install the package with

go get -d -u gobot.io/x/gobot/...

How to Use

Controller configurations are stored in Gobot it, but you can also use external file in JSON format. Take a look at the configs directory for examples.

How to Connect

Plug your USB joystick or game controller into your USB port. If your device is supported by SDL, you are now ready.

For the Dualshock4, you must pair the device with your computers Bluetooth interface first, before running your Gobot program.

Examples

This small program receives joystick and button press events from an PlayStation 3 game controller.

package main

import (
	"fmt"

	"gobot.io/x/gobot"
	"gobot.io/x/gobot/platforms/joystick"
)

func main() {
	joystickAdaptor := joystick.NewAdaptor()
	stick := joystick.NewDriver(joystickAdaptor, "dualshock3",
	)

	work := func() {
		// buttons
		stick.On(joystick.SquarePress, func(data interface{}) {
			fmt.Println("square_press")
		})
		stick.On(joystick.SquareRelease, func(data interface{}) {
			fmt.Println("square_release")
		})
		stick.On(joystick.TrianglePress, func(data interface{}) {
			fmt.Println("triangle_press")
		})
		stick.On(joystick.TriangleRelease, func(data interface{}) {
			fmt.Println("triangle_release")
		})
		stick.On(joystick.CirclePress, func(data interface{}) {
			fmt.Println("circle_press")
		})
		stick.On(joystick.CircleRelease, func(data interface{}) {
			fmt.Println("circle_release")
		})
		stick.On(joystick.XPress, func(data interface{}) {
			fmt.Println("x_press")
		})
		stick.On(joystick.XRelease, func(data interface{}) {
			fmt.Println("x_release")
		})
		stick.On(joystick.StartPress, func(data interface{}) {
			fmt.Println("start_press")
		})
		stick.On(joystick.StartRelease, func(data interface{}) {
			fmt.Println("start_release")
		})
		stick.On(joystick.SelectPress, func(data interface{}) {
			fmt.Println("select_press")
		})
		stick.On(joystick.SelectRelease, func(data interface{}) {
			fmt.Println("select_release")
		})

		// joysticks
		stick.On(joystick.LeftX, func(data interface{}) {
			fmt.Println("left_x", data)
		})
		stick.On(joystick.LeftY, func(data interface{}) {
			fmt.Println("left_y", data)
		})
		stick.On(joystick.RightX, func(data interface{}) {
			fmt.Println("right_x", data)
		})
		stick.On(joystick.RightY, func(data interface{}) {
			fmt.Println("right_y", data)
		})

		// triggers
		stick.On(joystick.R1Press, func(data interface{}) {
			fmt.Println("R1Press", data)
		})
		stick.On(joystick.R2Press, func(data interface{}) {
			fmt.Println("R2Press", data)
		})
		stick.On(joystick.L1Press, func(data interface{}) {
			fmt.Println("L1Press", data)
		})
		stick.On(joystick.L2Press, func(data interface{}) {
			fmt.Println("L2Press", data)
		})
	}

	robot := gobot.NewRobot("joystickBot",
		[]gobot.Connection{joystickAdaptor},
		[]gobot.Device{stick},
		work,
	)

	robot.Start()
}

How to Add A New Joystick

In the bin directory for this package is a CLI utility program that scans for SDL joystick events, and displays the ID and value:

$ go run ./platforms/joystick/bin/scanner.go 
Joystick 0 connected
[6625 ms] Axis: 1       value:-22686
[6641 ms] Axis: 1       value:-32768
[6836 ms] Axis: 1       value:-18317
[6852 ms] Axis: 1       value:0
[8663 ms] Axis: 3       value:-32768
[8873 ms] Axis: 3       value:0
[10183 ms] Axis: 0      value:-24703
[10183 ms] Axis: 0      value:-32768
[10313 ms] Axis: 1      value:-3193
[10329 ms] Axis: 1      value:0
[10345 ms] Axis: 0      value:0

You can use the output from this program to create a JSON file for the various buttons and axes on your joystick/gamepad. You could also create a file similar to joystick_dualshock3.go and submit a pull request with the new configuration so others can use it as well.

# Functions

NewAdaptor returns a new Joystick Adaptor.
NewDriver returns a new Driver with a polling interval of 10 Milliseconds given a Joystick Adaptor and json button configuration file location.

# Constants

A button press event.
A button release event.
back button press event.
back button release event.
blue pad press event.
blue pad release event.
B button press event.
B button release event.
circle button press event.
circle button release event.
down gamepad press event.
down gamepad release event.
Dualshock3 joystick configuration.
Dualshock4 joystick configuration.
green pad press event.
green pad release event.
home button press event.
home button release event.
L1 button joystick event.
L1 button press event.
L1 button release event.
L2 joystick event.
L2 button press event.
L2 button release event.
L3 button press event.
L3 button release event.
lb button press event.
lb button release event.
left gamepad press event.
left gamepad release event.
left X joystick event.
left Y joystick event.
lt button press event.
lt button release event.
options button press event.
options button release event.
pedal press event.
pedal release event.
R1 button joystick event.
R1 button press event.
R1 button release event.
R2 joystick event.
R2 button press event.
R1 button release event.
R3 button press event.
R1 button release event.
rb button press event.
rb button release event.
red pad press event.
red pad release event.
right gamepad press event.
right gamepad release event.
right X joystick event.
right Y joystick event.
rt button press event.
rt button release event.
select button press event.
select button release event.
share button press event.
share button relase event.
Nvidia Shield TV Controller.
square button press event.
square button release event.
start button press event.
start button release event.
TFlightHotasX flight stick configuration.
triangle button press event.
triangle button release event.
up gamepad press event.
up gamepad release event.
Xbox360 joystick configuration.
Xbox360RockBandDrums controller configuration.
X button press event.
X button release event.
yellow pad press event.
yellow pad release event.
Y button press event.
Y button release event.

# Structs

Adaptor represents a connection to a joystick.
Driver represents a joystick.