joystick

package
v0.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 10, 2016 License: Apache-2.0, Apache-2.0 Imports: 7 Imported by: 0

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
  • 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 github.com/hybridgroup/gobot/... && go install github.com/hybridgroup/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"

	"github.com/hybridgroup/gobot"
	"github.com/hybridgroup/gobot/platforms/joystick"
)

func main() {
	gbot := gobot.NewGobot()

	joystickAdaptor := joystick.NewJoystickAdaptor("ps3")
	joystick := joystick.NewJoystickDriver(joystickAdaptor,
		"ps3",
		"./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,
	)

	gbot.AddRobot(robot)

	gbot.Start()
}

Documentation

Overview

Package joystick provides the Gobot adaptor and drivers for game controllers that are compatible with SDL.

Installing:

This package requires `sdl2` to be installed on your system Then install package with:

go get github.com/hybridgroup/gobot/platforms/joystick

Example:

package main

import (
	"fmt"

	"github.com/hybridgroup/gobot"
	"github.com/hybridgroup/gobot/platforms/joystick"
)

func main() {
	gbot := gobot.NewGobot()

	joystickAdaptor := joystick.NewJoystickAdaptor("ps3")
	joystick := joystick.NewJoystickDriver(joystickAdaptor,
		"ps3",
		"./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,
	)

	gbot.AddRobot(robot)

	gbot.Start()
}

For further information refer to joystick README: https://github.com/hybridgroup/gobot/blob/master/platforms/joystick/README.md

Index

Constants

View Source
const (
	// left X joystick event
	LeftX = "left_x"
	// left Y joystick event
	LeftY = "left_y"
	// right X joystick event
	RightX = "right_x"
	// right Y joystick event
	RightY = "right_y"
	// L1 button joystick event
	L1 = "l1"
	// L2 joystick event
	L2 = "l2"
	// R1 button joystick event
	R1 = "r1"
	// R2 joystick event
	R2 = "r2"
	// up gamepad event
	Up = "up"
	// down gamepad event
	Down = "down"
	// left gamepad event
	Left = "left"
	// right gamepad event
	Right = "right"
	// square button press event
	SquarePress = "square_press"
	// square button release event
	SquareRelease = "square_release"
	// circle button press event
	CirclePress = "circle_press"
	// circle button release event
	CircleRelease = "circle_release"
	// triangle button press event
	TrianglePress = "triangle_press"
	// triangle button release event
	TriangleRelease = "triangle_release"
	// X button press event
	XPress = "x_press"
	// X button release event
	XRelease = "x_release"
	// share button press event
	SharePress = "share_press"
	// share button relase event
	ShareRelease = "share_release"
	// options button press event
	OptionsPress = "options_press"
	// options button release event
	OptionsRelease = "options_release"
	// home button press event
	HomePress = "home_press"
	// home button release event
	HomeRelease = "home_release"
	// start button press event
	StartPress = "start_press"
	// start button release event
	StartRelease = "start_release"
	// rt button press event
	RTPress = "rt_press"
	// rt button release event
	RTRelease = "rt_release"
	// lt button press event
	LTPress = "lt_press"
	// lt button release event
	LTRelease = "lt_release"
	// Y button press event
	YPress = "y_press"
	// Y button release event
	YRelease = "y_release"
	// A button press event
	APress = "a_press"
	// A button release event
	ARelease = "a_release"
	// B button press event
	BPress = "b_press"
	// B button release event
	BRelease = "b_release"
	// rb button press event
	RBPress = "rb_press"
	// rb button release event
	RBRelease = "rb_release"
	// lb button press event
	LBPress = "lb_press"
	// lb button release event
	LBRelease = "lb_release"
	// back button press event
	BackPress = "back_press"
	// back button release event
	BackRelease = "back_release"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type JoystickAdaptor

type JoystickAdaptor struct {
	// contains filtered or unexported fields
}

JoystickAdaptor represents a connection to a joystick

func NewJoystickAdaptor

func NewJoystickAdaptor(name string) *JoystickAdaptor

NewJoystickAdaptor returns a new JoystickAdaptor with specified name.

func (*JoystickAdaptor) Connect

func (j *JoystickAdaptor) Connect() (errs []error)

Connect connects to the joystick

func (*JoystickAdaptor) Finalize

func (j *JoystickAdaptor) Finalize() (errs []error)

Finalize closes connection to joystick

func (*JoystickAdaptor) Name

func (j *JoystickAdaptor) Name() string

Name returns the JoystickAdaptors name

type JoystickDriver

type JoystickDriver struct {
	gobot.Eventer
	// contains filtered or unexported fields
}

JoystickDriver represents a joystick

func NewJoystickDriver

func NewJoystickDriver(a *JoystickAdaptor, name string, config string, v ...time.Duration) *JoystickDriver

NewJoystickDriver returns a new JoystickDriver with a polling interval of 10 Milliseconds given a JoystickAdaptor, name and json button configuration file location.

Optionally accepts:

time.Duration: Interval at which the JoystickDriver is polled for new information

func (*JoystickDriver) Connection

func (j *JoystickDriver) Connection() gobot.Connection

Connection returns the JoystickDrivers connection

func (*JoystickDriver) Halt

func (j *JoystickDriver) Halt() (errs []error)

Halt stops joystick driver

func (*JoystickDriver) Name

func (j *JoystickDriver) Name() string

Name returns the JoystickDrivers name

func (*JoystickDriver) Start

func (j *JoystickDriver) Start() (errs []error)

Start and polls the state of the joystick at the given interval.

Emits the Events:

Error error - On button error
Events defined in the json button configuration file.
They will have the format:
	[button]_press
	[button]_release
	[axis]

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL