/ VOTE_Keyboard / code.py
code.py
 1  # SPDX-FileCopyrightText: 2020 Collin Cunningham for Adafruit Industries
 2  #
 3  # SPDX-License-Identifier: MIT
 4  
 5  import board
 6  from digitalio import DigitalInOut, Direction, Pull
 7  import usb_hid
 8  from adafruit_hid.keyboard import Keyboard
 9  from adafruit_hid.keycode import Keycode
10  from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
11  
12  kbd = Keyboard(usb_hid.devices)
13  kbdLayout = KeyboardLayoutUS(kbd)
14  state = []
15  pins = {}
16  buttonMap = [
17      dict(row="D4", col="D0", id=1),
18      dict(row="D4", col="D1", id=2),
19      dict(row="D4", col="D2", id=3),
20      dict(row="D3", col="D2", id=4),
21      dict(row="D3", col="D0", id=5),
22      dict(row="D3", col="D1", id=6)]
23  
24  # Set up row pins
25  for pin in ["D4", "D3"]:
26      p = DigitalInOut(getattr(board, pin))
27      p.direction = Direction.OUTPUT
28      pins[pin] = p
29  
30  # Set up column pins
31  for pin in ["D0", "D1", "D2"]:
32      p = DigitalInOut(getattr(board, pin))
33      p.direction = Direction.INPUT
34      p.pull = Pull.DOWN
35      pins[pin] = p
36  
37  buttonIDtoKeycode = {
38      1: Keycode.V,
39      2: Keycode.O,
40      3: Keycode.T,
41      4: Keycode.E,
42      5: Keycode.SPACE,
43      6: Keycode.ENTER}
44  
45  while True:
46  	# Compare old and new state
47      oldState = state
48      newState = []
49      newBtn = None
50      for button in buttonMap:
51          r = pins[button["row"]]
52          r.value = True
53          if pins[button["col"]].value:
54              newState += [button["id"]]
55              if not button["id"] in oldState:
56                  newBtn = button["id"]
57          r.value = False
58      # Press & release keys
59      for oldID in oldState:
60          if not oldID in newState:
61              kbd.release(buttonIDtoKeycode[oldID])
62      if newBtn:
63          kbd.press(buttonIDtoKeycode[newBtn])
64      state = newState
65