/ 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