hybridgroup.gobot/platforms/joystick
Thomas Kohler a8f47eaae8
build(go, deps): switch to Go 1.22 and update modules (#1093)
2024-11-01 12:54:20 +01:00
..
bin build(go, deps): switch to Go 1.22 and update modules (#1093) 2024-11-01 12:54:20 +01:00
configs joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
LICENSE joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
README.md examples: fix missing checks of return values (#1060) 2024-02-11 15:34:50 +01:00
doc.go doc: update links to release or tagged branch (#1069) 2024-02-13 15:58:31 +01:00
events.go Build(v2): revert move to v2 subfolder (#932) 2023-05-29 19:23:28 +02:00
joystick_adaptor.go neurosky: use serialport adaptor and move driver to drivers/serial (#1061) 2024-02-12 16:27:08 +01:00
joystick_adaptor_test.go lint(all): fix issues of errorlint etc (#1037) 2023-11-15 20:51:52 +01:00
joystick_driver.go build(go, deps): switch to Go 1.22 and update modules (#1093) 2024-11-01 12:54:20 +01:00
joystick_driver_test.go test: try to stabilize eventer tests (#1066) 2024-02-13 10:33:46 +01:00
joystick_dualsense.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_dualshock3_darwin.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_dualshock3_linux.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_dualshock3_windows.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_dualshock4_darwin.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_dualshock4_linux.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_dualshock4_windows.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_nintendo_joycon.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_shield.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_tflight_hotas_x.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_xbox360.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_xbox360_rock_band_drums.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
joystick_xboxone.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00
test_helper.go joystick(core): replace sdl with 0xcafed00d/joystick package (#988) 2023-09-23 12:32:31 +02:00

README.md

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.