Initial Commit
This commit is contained in:
parent
cd70efaa31
commit
e2c2f22a06
1 changed files with 111 additions and 0 deletions
111
Giant_Mechanical_Keyboard/code.py
Normal file
111
Giant_Mechanical_Keyboard/code.py
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
# Big Control Alt Delete Board
|
||||
# Code is written for the Circuit Playground Express board:
|
||||
# https://www.adafruit.com/product/3333
|
||||
# Needs the NeoPixel module installed:
|
||||
# https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel
|
||||
# Author: Collin Cunningham
|
||||
# License: MIT License (https://opensource.org/licenses/MIT)
|
||||
|
||||
from digitalio import DigitalInOut, Direction, Pull
|
||||
import board
|
||||
import time
|
||||
import neopixel
|
||||
from adafruit_hid.keyboard import Keyboard
|
||||
from adafruit_hid.keycode import Keycode
|
||||
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
|
||||
|
||||
pixels = neopixel.NeoPixel(board.NEOPIXEL, 10, brightness=.2)
|
||||
pixels.fill((0,0,0))
|
||||
pixels.show()
|
||||
|
||||
# The pins connected to each switch/button
|
||||
buttonpins = [board.A7, board.A5, board.A3]
|
||||
# The pins connected to each LED
|
||||
ledpins = [board.A6, board.A4, board.A2]
|
||||
|
||||
# our array of button & LED objects
|
||||
buttons = []
|
||||
leds = []
|
||||
|
||||
# The keycode sent for each switch/button, will be paired with a control key
|
||||
buttonkeys = [Keycode.CONTROL, Keycode.ALT, Keycode.DELETE]
|
||||
buttonspressed = [False, False, False]
|
||||
buttonspressedlast = [False, False, False]
|
||||
|
||||
# the keyboard object!
|
||||
kbd = Keyboard()
|
||||
# we're americans :)
|
||||
layout = KeyboardLayoutUS(kbd)
|
||||
|
||||
# make all button pin objects, make them inputs w/pullups
|
||||
for pin in buttonpins:
|
||||
button = DigitalInOut(pin)
|
||||
button.direction = Direction.INPUT
|
||||
button.pull = Pull.UP
|
||||
buttons.append(button)
|
||||
|
||||
# make all LED objects, make them inputs w/pullups
|
||||
for pin in ledpins:
|
||||
led = DigitalInOut(pin)
|
||||
led.direction = Direction.OUTPUT
|
||||
leds.append(led)
|
||||
|
||||
# set up the status LED
|
||||
statusled = DigitalInOut(board.D13)
|
||||
statusled.direction = Direction.OUTPUT
|
||||
|
||||
print("Waiting for button presses")
|
||||
|
||||
def pressbutton(i):
|
||||
l = leds[i] # find the switch LED
|
||||
k = buttonkeys[i] # get the corresp. keycode/str
|
||||
l.value = True # turn on LED
|
||||
kbd.press(k) # send keycode
|
||||
|
||||
def releasebutton(i):
|
||||
l = leds[i] # find the switch LED
|
||||
k = buttonkeys[i] # get the corresp. keycode/str
|
||||
l.value = False # turn on LED
|
||||
kbd.release(k) # send keycode
|
||||
|
||||
def lightneopixels():
|
||||
vals = [0, 0, 0]
|
||||
# if switch 0 pressed, show blue
|
||||
if buttonspressed[0]:
|
||||
vals[2] = 255
|
||||
# if switch 1 pressed, show yellow
|
||||
if buttonspressed[1]:
|
||||
vals[0] = 127
|
||||
vals[1] = 64
|
||||
# if switch 2 pressed, show red
|
||||
if buttonspressed[2]:
|
||||
vals[0] = 255
|
||||
# if all pressed, show white
|
||||
if buttonspressed[0] and buttonspressed[1] and buttonspressed[2]:
|
||||
vals = [255,255,255]
|
||||
# if 0 & 1 pressed, show green
|
||||
if buttonspressed[0] and buttonspressed[1] and not buttonspressed[2]:
|
||||
vals = [0,255,0]
|
||||
pixels.fill((vals[0],vals[1],vals[2]))
|
||||
pixels.show()
|
||||
|
||||
|
||||
while True:
|
||||
# check each button
|
||||
for button in buttons:
|
||||
i = buttons.index(button)
|
||||
if button.value == False: # button is pressed?
|
||||
buttonspressed[i] = True # save pressed button
|
||||
if buttonspressedlast[i] == False: # was button not pressed last time?
|
||||
print("Pressed #%d" % i)
|
||||
pressbutton(i)
|
||||
else:
|
||||
buttonspressed[i] = False # button was not pressed
|
||||
if buttonspressedlast[i] == True: # was button pressed last time?
|
||||
print("Released #%d" % i)
|
||||
releasebutton(i)
|
||||
lightneopixels()
|
||||
# save pressed buttons as pressed last
|
||||
buttonspressedlast = list(buttonspressed)
|
||||
time.sleep(0.01)
|
||||
|
||||
Loading…
Reference in a new issue