adrianhesketh.com

4x4 alphanumeric keypad on the Raspberry Pi with Go

I’m building a burglar alam with my son, using a Raspberry Pi Zero as the micro-controller, and using Go as the programming language.

That’s led to me needing a few libraries along the way. Today’s library is the 4x4 keypad.

The code is available at https://github.com/a-h/keypad

It was harder to write than you might expect, because it relies on switching on each column in turn and reading the row value very quickly to determine which key was pressed, however, this keypad design reduces the number of GPIO pins required which makes it a good choice.

err := rpio.Open()
if err != nil {
  fmt.Printf("error: %v\n", err)
  os.Exit(1)
}
defer rpio.Close()

// See https://pinout.xyz to select pins.
p1 := rpio.Pin(4)
p2 := rpio.Pin(17)
p3 := rpio.Pin(27)
p4 := rpio.Pin(22)
p5 := rpio.Pin(18)
p6 := rpio.Pin(23)
p7 := rpio.Pin(24)
p8 := rpio.Pin(25)

pad := keypad.New(p1, p2, p3, p4, p5, p6, p7, p8)
for {
  if keys, ok := pad.Read(); ok {
    for _, e := range keys {
      fmt.Printf("Key: %+v\n", e)
    }
  }
}