hybridgroup.gobot/platforms/joystick
deadprogram 953c3254e7 core: use canonical import domain of gobot.io for all code
Signed-off-by: deadprogram <ron@hybridgroup.com>
2016-12-08 13:24:03 +01:00
..
configs Adds support for Dualshock4 wireless gamepad 2016-02-20 09:41:38 -08:00
LICENSE misc: update all LICENSE files for current year 2016-08-27 13:12:47 +02:00
README.md core: use canonical import domain of gobot.io for all code 2016-12-08 13:24:03 +01:00
doc.go core: use canonical import domain of gobot.io for all code 2016-12-08 13:24:03 +01:00
events.go docs: go fmt files that needed it from recent changes 2016-09-12 21:33:14 +02:00
joystick_adaptor.go core: update Joystick platform to simply return error 2016-11-07 21:29:51 +01:00
joystick_adaptor_test.go core: use canonical import domain of gobot.io for all code 2016-12-08 13:24:03 +01:00
joystick_driver.go core: use canonical import domain of gobot.io for all code 2016-12-08 13:24:03 +01:00
joystick_driver_test.go core: use canonical import domain of gobot.io for all code 2016-12-08 13:24:03 +01: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
  • XBox360 game 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

Ubuntu

$ sudo apt-get install libsdl2-2.0-0

Now you can install the package with

go get -d -u gobot.io/x/gobot/... && go install gobot.io/x/gobot/platforms/joystick

How to Use

Controller configurations are stored in JSON format. Here's an example configuration file for the Dualshock 3 controller

{
    "name": "Sony PLAYSTATION(R)3 Controller",
    "guid": "030000004c0500006802000011010000",
    "axis": [
        {
            "name": "left_x",
            "id": 0
        },
        {
            "name": "left_y",
            "id": 1
        },
        {
            "name": "right_x",
            "id": 2
        },
        {
            "name": "right_y",
            "id": 3
        }
    ],
    "buttons": [
        {
            "name": "square",
            "id": 15
        },
        {
            "name": "triangle",
            "id": 12
        },
        {
            "name": "circle",
            "id": 13
        },
        {
            "name": "x",
            "id": 14
        },
        {
            "name": "up",
            "id": 4
        },
        {
            "name": "down",
            "id": 6
        },
        {
            "name": "left",
            "id": 7
        },
        {
            "name": "right",
            "id": 5
        },
        {
            "name": "left_stick",
            "id": 1
        },
        {
            "name": "right_stick",
            "id": 2
        },
        {
            "name": "l1",
            "id": 10
        },
        {
            "name": "l2",
            "id": 8
        },
        {
            "name": "r1",
            "id": 11
        },
        {
            "name": "r2",
            "id": 9
        },
        {
            "name": "start",
            "id": 3
        },
        {
            "name": "select",
            "id": 0
        },
        {
            "name": "home",
            "id": 16
        }
    ]
}

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()
	joystick := joystick.NewDriver(joystickAdaptor,
		"./platforms/joystick/configs/dualshock3.json",
	)

	work := func() {
		gobot.On(joystick.Event("square_press"), func(data interface{}) {
			fmt.Println("square_press")
		})
		gobot.On(joystick.Event("square_release"), func(data interface{}) {
			fmt.Println("square_release")
		})
		gobot.On(joystick.Event("triangle_press"), func(data interface{}) {
			fmt.Println("triangle_press")
		})
		gobot.On(joystick.Event("triangle_release"), func(data interface{}) {
			fmt.Println("triangle_release")
		})
		gobot.On(joystick.Event("left_x"), func(data interface{}) {
			fmt.Println("left_x", data)
		})
		gobot.On(joystick.Event("left_y"), func(data interface{}) {
			fmt.Println("left_y", data)
		})
		gobot.On(joystick.Event("right_x"), func(data interface{}) {
			fmt.Println("right_x", data)
		})
		gobot.On(joystick.Event("right_y"), func(data interface{}) {
			fmt.Println("right_y", data)
		})
	}

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

	robot.Start()
}