From 66b40e10e356a4ca82038d162e2dcddedc79ec0d Mon Sep 17 00:00:00 2001 From: Michael Grote Date: Fri, 27 Aug 2021 11:42:01 +0200 Subject: [PATCH] =?UTF-8?q?neues=20layout=20wo=20seite=20wei=C3=9F=20ist?= =?UTF-8?q?=20und=20fl=C3=A4che=20in=20layer=20farbe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/code_eigenbau_led_einfacher.py | 137 ++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 code/code_eigenbau_led_einfacher.py diff --git a/code/code_eigenbau_led_einfacher.py b/code/code_eigenbau_led_einfacher.py new file mode 100644 index 0000000..f990e5e --- /dev/null +++ b/code/code_eigenbau_led_einfacher.py @@ -0,0 +1,137 @@ +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) + + +# Denfiniere Layer als Dictionary +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} + +# welches ist der aktive Layer +current_layer = 1 +# weclche Tasten dienen nicht der Layer-Auswahl +nutzbare_tasten = range(4,16) #zählt von 1-16; nicht 0-15 +# Debounce-Werte +short_debounce = 0.03 +long_debounce = 0.15 +debounce = short_debounce +taste_ausgelöst = False + +# Farben der Layer als Dictionary +# https://gist.github.com/ninrod/b0f86d77ebadaccf7d9d4431dd8e2983 +# https://colorhunt.co/palette/f7fd04f9b208f98404fc5404 +colours = {0: (247, 253, 4), + 1: (249, 178, 8), + 2: (249, 132, 4), + 3: (252, 84, 4), + 4: (255,155,255)} # weiß +# setze farben auf layer keys und den nutzbaren tasten nach dem start +keybow.keys[0].set_led(*colours[0]) +keybow.keys[1].set_led(*colours[1]) +keybow.keys[2].set_led(*colours[2]) +keybow.keys[3].set_led(*colours[3]) + +while True: + # Always remember to call keybow.update()! + keybow.update() + # wenn layer-auswahl key gedrückt dann.. + if keys[0].pressed: + # setze ALLE nutzbaren tasten auf weiß + for k in nutzbare_tasten: + keys[k].set_led(*colours[0]) + keybow.keys[0].set_led(*colours[0]) + keybow.keys[1].set_led(*colours[4]) + keybow.keys[2].set_led(*colours[4]) + keybow.keys[3].set_led(*colours[4]) + # setze current layer + current_layer = 0 + elif keys[1].pressed: + for k in nutzbare_tasten: + keys[k].set_led(*colours[1]) + keybow.keys[0].set_led(*colours[4]) + keybow.keys[1].set_led(*colours[1]) + keybow.keys[2].set_led(*colours[4]) + keybow.keys[3].set_led(*colours[4]) + current_layer = 1 + elif keys[2].pressed: + for k in nutzbare_tasten: + keys[k].set_led(*colours[2]) + keybow.keys[0].set_led(*colours[4]) + keybow.keys[1].set_led(*colours[4]) + keybow.keys[2].set_led(*colours[2]) + keybow.keys[3].set_led(*colours[4]) + current_layer = 2 + elif keys[3].pressed: + for k in nutzbare_tasten: + keys[k].set_led(*colours[3]) + keybow.keys[0].set_led(*colours[4]) + keybow.keys[1].set_led(*colours[4]) + keybow.keys[2].set_led(*colours[4]) + keybow.keys[3].set_led(*colours[3]) + current_layer = 3 + # "frage" alle tasten ab + for taste in layers[current_layer].keys(): + # wenn gedrückt + if keys[taste].pressed: + + # setze keycode + key_press = layers[current_layer][taste] + # prufe ob taste vor kurzem ausgelöst wurde + if not taste_ausgelöst: + taste_ausgelöst = True + # prüfe layer wegen debounce und "sende"-art + 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) + # hebe "debounce" auf + if taste_ausgelöst and time.monotonic() - keybow.time_of_last_press > debounce: + taste_ausgelöst = False