hybridgroup.gobot/platforms/joystick
Ron Evans 748cb2bb16 joystick: update scanner to match go-sdl 0.3 API changes
Signed-off-by: Ron Evans <ron@hybridgroup.com>
2018-05-30 13:58:27 +02:00
..
bin joystick: update scanner to match go-sdl 0.3 API changes 2018-05-30 13:58:27 +02:00
configs Update dualshock4.json to match joystick_dualshock4.go 2018-05-20 10:23:19 +01:00
LICENSE docs: update copyright date to 2018 2018-02-14 08:24:39 +01:00
README.md joystick: add instructions to README on how to install SDL on Linux from source 2018-05-25 12:27:16 +02:00
doc.go docs: correct Joystick README link 2016-12-21 10:52:29 +01:00
events.go Merge pull request #525 from SMerrony/add-tflight-hotas-x-controller 2018-05-09 12:34:05 +02:00
joystick_adaptor.go joystick: use new improved default namer to avoid API conflicts 2017-02-02 16:24:48 +01:00
joystick_adaptor_test.go joystick: increase test coverage 2017-04-06 10:00:58 +02:00
joystick_driver.go Merge pull request #555 from imathno/fix-DPAD 2018-05-25 11:12:43 +02:00
joystick_driver_test.go joystick: correct test issue 2018-05-25 12:42:29 +02:00
joystick_dualshock3.go joystick: full corrected ds3 and ds4 mappings plus examples to match for latest sdl 2.0.8 2018-05-25 12:19:22 +02:00
joystick_dualshock4.go joystick: full corrected ds3 and ds4 mappings plus examples to match for latest sdl 2.0.8 2018-05-25 12:19:22 +02:00
joystick_tflight_hotas_x.go Add T-Flight Hotas X flight controoller 2018-05-08 07:25:37 +01:00
joystick_xbox360.go joystick: able to configure joysticks without external json file 2018-04-14 13:34:28 +02:00
joystick_xbox360_rock_band_drums.go joystick: add xbox360 rock band drums controller 2018-05-07 23:46:17 +02:00
test_helper.go Tests also need to be pointed to @veandco go-sdl2 fork 2016-02-20 14:43:16 -08:00

README.md

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

OSX

To install sdl2 on OSX using Homebrew:

$ brew install sdl2

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

Ubuntu

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.