Skip to content

Instantly share code, notes, and snippets.

@peterhellberg
Created September 18, 2016 11:58
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peterhellberg/5a1f66927972587ea3aef24375a1a89d to your computer and use it in GitHub Desktop.
Save peterhellberg/5a1f66927972587ea3aef24375a1a89d to your computer and use it in GitHub Desktop.
How to use the Raspberry Pi Sense HAT Joystick using golang-evdev
package main
import (
"flag"
"fmt"
"os"
"os/signal"
evdev "github.com/gvalkov/golang-evdev"
screen "github.com/nathany/bobblehat/sense/screen"
color "github.com/nathany/bobblehat/sense/screen/color"
)
var path = flag.String("path", "/dev/input/event0", "path to the event device")
func main() {
flag.Parse()
if !evdev.IsInputDevice(*path) {
os.Exit(1)
}
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
go func() {
for range c {
fmt.Println("Clearing the screen...")
screen.Clear()
os.Exit(0)
}
}()
device, err := evdev.Open(*path)
if err != nil {
fmt.Printf("Unable to open input device: %s\nError: %v\n", *path, err)
os.Exit(1)
}
fmt.Println(device)
// Clear the Sense HAT screen
screen.Clear()
for {
events, err := device.Read()
if err != nil {
fmt.Printf("device.Read() Error: %v\n", err)
os.Exit(1)
}
for _, ev := range events {
switch ev.Type {
case evdev.EV_KEY:
ke := evdev.NewKeyEvent(&ev)
if ke.State != evdev.KeyDown {
continue
}
// Create a new framebuffer
fb := screen.NewFrameBuffer()
switch ke.Scancode {
case evdev.KEY_ENTER:
fmt.Println("⏎ ")
case evdev.KEY_UP:
fmt.Println("↑")
draw(fb, 0, 0, 8, 4, color.New(255, 255, 0))
case evdev.KEY_DOWN:
fmt.Println("↓")
draw(fb, 0, 4, 8, 8, color.New(255, 0, 0))
case evdev.KEY_LEFT:
fmt.Println("←")
draw(fb, 0, 0, 4, 8, color.New(0, 0, 255))
case evdev.KEY_RIGHT:
fmt.Println("→")
draw(fb, 4, 0, 8, 8, color.New(0, 255, 0))
}
screen.Draw(fb)
}
}
}
}
func draw(fb *screen.FrameBuffer, a, b, m, n int, c color.Color) {
for i := a; i < m; i++ {
for j := b; j < n; j++ {
fb.SetPixel(i, j, c)
}
}
}
@peterhellberg
Copy link
Author

Example output:

InputDevice /dev/input/event0 (fd 3)
  name Raspberry Pi Sense HAT Joystick
  phys rpi-sense-joy/input0
  bus 0x0018, vendor 0x0000, product 0x0000, version 0x0000
  events EV_SYN 0, EV_KEY 1, EV_REP 20
↑
→
↓
←
⏎

@peterhellberg
Copy link
Author

img_2169
06c9bd44-668f-4b7f-935f-7a5abde171f7

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment