import board import time from keybow2040 import Keybow2040 import usb_hid from adafruit_hid.keyboard import Keyboard from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS from adafruit_hid.keycode import Keycode from adafruit_hid.consumer_control import ConsumerControl from adafruit_hid.consumer_control_code import ConsumerControlCode # Set up Keybow i2c = board.I2C() keybow = Keybow2040(i2c) keys = keybow.keys # Set up the keyboard and layout keyboard = Keyboard(usb_hid.devices) layout = KeyboardLayoutUS(keyboard) # Set up consumer control (used to send media key presses) consumer_control = ConsumerControl(usb_hid.devices) # Our layers. The key of item in the layer dictionary is the key number on # Keybow to map to, and the value is the key press to send. # Note that keys 0-3 are reserved as the modifier and layer selector keys # respectively. layer_0 = {} layer_1 = {4: Keycode.PERIOD, 5: Keycode.ONE, 6: Keycode.FOUR, 7: Keycode.SEVEN, 8: Keycode.ZERO, 9: Keycode.TWO, 10: Keycode.FIVE, 11: Keycode.EIGHT, 12: Keycode.ENTER, 13: Keycode.THREE, 14: Keycode.SIX, 15: Keycode.NINE} layer_2 = {4: "Mit freundlichen Gruessen\nMichael Grote " } layer_3 = {6: ConsumerControlCode.VOLUME_DECREMENT, 7: ConsumerControlCode.SCAN_PREVIOUS_TRACK, 10: ConsumerControlCode.MUTE, 11: ConsumerControlCode.PLAY_PAUSE, 14: ConsumerControlCode.VOLUME_INCREMENT, 15: ConsumerControlCode.SCAN_NEXT_TRACK} layers = {0: layer_0, 1: layer_1, 2: layer_2, 3: layer_3} current_layer = 1 nutzbare_tasten = range(4,16) #zählt von 1-16; nicht 0-15 short_debounce = 0.03 long_debounce = 0.15 debounce = short_debounce taste_ausgelöst = False # The colours for each layer # https://gist.github.com/ninrod/b0f86d77ebadaccf7d9d4431dd8e2983 # https://colorhunt.co/palette/f7fd04f9b208f98404fc5404 # setze farben auf layer keys keybow.keys[0].set_led(247, 253, 4) keybow.keys[1].set_led(249, 178, 8) keybow.keys[2].set_led(249, 132, 4) keybow.keys[3].set_led(252, 84, 4) for n in nutzbare_tasten: keybow.keys[n].set_led(255,155,255) while True: # Always remember to call keybow.update()! keybow.update() if keys[0].pressed: current_layer = 0 for n in nutzbare_tasten: keybow.keys[n].set_led(247, 253, 4) keybow.keys[0].set_led(247, 253, 4) keybow.keys[1].set_led(255, 255, 255) keybow.keys[2].set_led(255, 255, 255) keybow.keys[3].set_led(255, 255, 255) elif keys[1].pressed: current_layer = 1 for n in nutzbare_tasten: keybow.keys[n].set_led(249, 178, 8) keybow.keys[0].set_led(255, 255, 255) keybow.keys[1].set_led(249, 178, 8) keybow.keys[2].set_led(255, 255, 255) keybow.keys[3].set_led(255, 255, 255) elif keys[2].pressed: current_layer = 2 for n in nutzbare_tasten: keybow.keys[n].set_led(249, 132, 4) keybow.keys[0].set_led(255, 255, 255) keybow.keys[1].set_led(255, 255, 255) keybow.keys[2].set_led(249, 132, 4) keybow.keys[3].set_led(255, 255, 255) elif keys[3].pressed: current_layer = 3 for n in nutzbare_tasten: keybow.keys[n].set_led(252, 84, 4) keybow.keys[0].set_led(255, 255, 255) keybow.keys[1].set_led(255, 255, 255) keybow.keys[2].set_led(255, 255, 255) keybow.keys[3].set_led(252, 84, 4) for taste in layers[current_layer].keys(): if keys[taste].pressed: key_press = layers[current_layer][taste] # If the key hasn't just fired (prevents refiring) if not taste_ausgelöst: taste_ausgelöst = True # Send the right sort of key press and set debounce for each if current_layer == 0: keyboard.send(key_press) elif current_layer == 1: keyboard.send(key_press) elif current_layer == 2: debounce = long_debounce layout.write(key_press) elif current_layer == 3: consumer_control.send(key_press) # If enough time has passed, reset the fired variable if taste_ausgelöst and time.monotonic() - keybow.time_of_last_press > debounce: taste_ausgelöst = False # farben als vars