joystick

package
v2.4.0 Latest Latest
Warning

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

Go to latest
Published: Nov 5, 2024 License: Apache-2.0, Apache-2.0 Imports: 7 Imported by: 1

README

Joystick

You can use Gobot with many USB joysticks and game controllers.

Current configurations included:

  • Dualshock3 game controller
  • Dualshock4 game controller
  • Dualsense game controller
  • Thrustmaster T-Flight Hotas X Joystick
  • XBox360 game controller
  • XBox360 "Rock Band" drum controller
  • Nintendo Switch Joy-Con controller pair

How to Install

Any platform specific info here...

macOS
Linux (Ubuntu and Raspbian)
Windows

How to Use

Controller configurations are stored in Gobot, 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 your operating system, it might prompt you to install some system drivers.

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/v2"
  "gobot.io/x/gobot/v2/platforms/joystick"
)

func main() {
  joystickAdaptor := joystick.NewAdaptor("0")
  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,
  )

  if err := robot.Start(); err != nil {
		panic(err)
	}
}

How to Add A New Joystick

You can create a file similar to joystick_dualshock3.go and submit a pull request with the new configuration so others can use it as well.

Documentation

Overview

Package joystick provides the Gobot adaptor and drivers for game controllers and joysticks.

Installing:

Please refer to the main [README.md](https://github.com/hybridgroup/gobot/blob/release/README.md)

Example:

package main

import (
	"fmt"

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

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

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

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

	if err := robot.Start(); err != nil {
		panic(err)
	}
}

For further information refer to joystick README: https://github.com/hybridgroup/gobot/blob/release/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"
	// L1 button press event
	L1Press = "l1_press"
	// L1 button release event
	L1Release = "l1_release"
	// L2 joystick event
	L2 = "l2"
	// L2 button press event
	L2Press = "l2_press"
	// L2 button release event
	L2Release = "l2_release"
	// L3 button press event
	L3Press = "l3_press"
	// L3 button release event
	L3Release = "l3_release"
	// R1 button joystick event
	R1 = "r1"
	// R1 button press event
	R1Press = "r1_press"
	// R1 button release event
	R1Release = "r1_release"
	// R2 joystick event
	R2 = "r2"
	// R2 button press event
	R2Press = "r2_press"
	// R1 button release event
	R2Release = "r2_release"
	// R3 button press event
	R3Press = "r3_press"
	// R1 button release event
	R3Release = "r3_release"
	// up gamepad press event
	UpPress = "up_press"
	// up gamepad release event
	UpRelease = "up_release"
	// down gamepad press event
	DownPress = "down_press"
	// down gamepad release event
	DownRelease = "down_release"
	// left gamepad press event
	LeftPress = "left_press"
	// left gamepad release event
	LeftRelease = "left_release"
	// right gamepad press event
	RightPress = "right_press"
	// right gamepad release event
	RightRelease = "right_release"
	// 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 release event
	ShareRelease = "share_release"
	// create button press event
	CreatePress = "create_press"
	// create button release event
	CreateRelease = "create_release"
	// ps button press event
	PSPress = "ps_press"
	// ps button release event
	PSRelease = "ps_release"
	// trackpad button press event
	TrackpadPress = "trackpad_press"
	// trackpad button release event
	TrackpadRelease = "trackpad_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"
	// select button press event
	SelectPress = "select_press"
	// select button release event
	SelectRelease = "select_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"
	// red pad press event
	RedPress = "red_press"
	// red pad release event
	RedRelease = "red_release"
	// yellow pad press event
	YellowPress = "yellow_press"
	// yellow pad release event
	YellowRelease = "yellow_release"
	// blue pad press event
	BluePress = "blue_press"
	// blue pad release event
	BlueRelease = "blue_release"
	// green pad press event
	GreenPress = "green_press"
	// green pad release event
	GreenRelease = "green_release"
	// pedal press event
	PedalPress = "pedal_press"
	// pedal release event
	PedalRelease = "pedal_release"
)
View Source
const (
	// Dualshock3 joystick configuration.
	Dualshock3 = "dualshock3"

	// Dualshock4 joystick configuration.
	Dualshock4 = "dualshock4"

	// Dualsense joystick configuration.
	Dualsense = "dualsense"

	// TFlightHotasX flight stick configuration.
	TFlightHotasX = "tflightHotasX"

	// Configuration for Xbox 360 controller.
	Xbox360 = "xbox360"

	// Xbox360RockBandDrums controller configuration.
	Xbox360RockBandDrums = "xbox360RockBandDrums"

	// Configuration for the Xbox One controller.
	XboxOne = "xboxOne"

	// Nvidia Shield TV Controller
	Shield = "shield"

	// Nintendo Switch Joycon Controller Pair
	NintendoSwitchPair = "joyconPair"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Adaptor

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

Adaptor represents a connection to a joystick

func NewAdaptor

func NewAdaptor(id string) *Adaptor

NewAdaptor returns a new Joystick Adaptor. Pass in the ID of the joystick you wish to connect to.

func (*Adaptor) Connect

func (j *Adaptor) Connect() error

Connect connects to the joystick

func (*Adaptor) Finalize

func (j *Adaptor) Finalize() error

Finalize closes connection to joystick

func (*Adaptor) Name

func (j *Adaptor) Name() string

Name returns the adaptors name

func (*Adaptor) SetName

func (j *Adaptor) SetName(n string)

SetName sets the adaptors name

type Driver

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

Driver represents a joystick

func NewDriver

func NewDriver(a *Adaptor, config string, v ...time.Duration) *Driver

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

Optionally accepts:

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

func (*Driver) Connection

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

Connection returns the Drivers connection

func (*Driver) Halt

func (j *Driver) Halt() error

Halt stops joystick driver

func (*Driver) Name

func (j *Driver) Name() string

Name returns the Drivers name

func (*Driver) SetName

func (j *Driver) SetName(n string)

SetName sets the Drivers name

func (*Driver) Start

func (j *Driver) Start() 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