|
| 1 | +# SPDX-FileCopyrightText: 2022 john park & tod kurt for Adafruit Industries |
| 2 | +# SPDX-License-Identifier: MIT |
| 3 | +# Gemma IO demo - Keyboard emu |
| 4 | +# iCade Pinball Edition |
| 5 | + |
| 6 | +import board |
| 7 | +from digitalio import DigitalInOut, Pull |
| 8 | +from adafruit_debouncer import Debouncer |
| 9 | +import usb_hid |
| 10 | +from adafruit_hid.keyboard import Keyboard |
| 11 | +from adafruit_hid.keycode import Keycode |
| 12 | + |
| 13 | +# Allows three buttons on a Gemma M0 to control iCade standard Pinball Arcade |
| 14 | +# game on iOS using USB to Lightning "camera connector" |
| 15 | + |
| 16 | +# iCade keyboard mappings |
| 17 | +# See developer doc at: http://www.ionaudio.com/products/details/icade |
| 18 | + |
| 19 | +# WE YT UF IM OG |
| 20 | +# AQ< -->DC |
| 21 | +# XZ HR JN KP LV |
| 22 | + |
| 23 | +#control key is triggered by a press, doesn't repeat, second control key is |
| 24 | +#triggered by a release |
| 25 | + |
| 26 | +# define buttons |
| 27 | +num_keys = 3 |
| 28 | +pins = ( |
| 29 | + board.D0, # D0 |
| 30 | + board.D1, # D1 |
| 31 | + board.D2 # D2 |
| 32 | +) |
| 33 | + |
| 34 | +keys = [] |
| 35 | + |
| 36 | +# The keycode pair sent for each button: |
| 37 | +# D0 is left flipper - iCade key sequence (hold, release) is "hr" |
| 38 | +# D1 is right flipper - iCade key sequence (hold, release) is "lv" |
| 39 | +# D2 is plunger - iCade key sequence (hold, release) is "xz" |
| 40 | + |
| 41 | +for pin in pins: |
| 42 | + tmp_pin = DigitalInOut(pin) |
| 43 | + tmp_pin.pull = Pull.UP |
| 44 | + keys.append(Debouncer(tmp_pin)) |
| 45 | + |
| 46 | +keymap_pressed = { |
| 47 | + (0): ("Left Paddle", [Keycode.H]), |
| 48 | + (1): ("Right Paddle", [Keycode.L]), |
| 49 | + (2): ("Plunger", [Keycode.X]) |
| 50 | +} |
| 51 | +keymap_released = { |
| 52 | + (0): ("Left Paddle", [Keycode.R]), |
| 53 | + (1): ("Right Paddle", [Keycode.V]), |
| 54 | + (2): ("Plunger", [Keycode.Z]) |
| 55 | +} |
| 56 | + |
| 57 | +# the keyboard object |
| 58 | +kbd = Keyboard(usb_hid.devices) |
| 59 | + |
| 60 | +print("\nWelcome to keypad") |
| 61 | +print("keymap:") |
| 62 | +for k in range(num_keys): |
| 63 | + print("\t", (keymap_pressed[k][0])) |
| 64 | +print("Waiting for button presses") |
| 65 | + |
| 66 | + |
| 67 | +while True: |
| 68 | + for i in range(num_keys): |
| 69 | + keys[i].update() |
| 70 | + if keys[i].fell: |
| 71 | + print(keymap_pressed[i][0]) |
| 72 | + kbd.send(*keymap_pressed[i][1]) |
| 73 | + if keys[i].rose: |
| 74 | + print(keymap_released[i][0]) |
| 75 | + kbd.send(*keymap_released[i][1]) |
0 commit comments