115 lines
3.4 KiB
Python
115 lines
3.4 KiB
Python
# 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)
|
|
|
|
import time
|
|
|
|
import board
|
|
import neopixel
|
|
from adafruit_hid.keyboard import Keyboard
|
|
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
|
|
from adafruit_hid.keycode import Keycode
|
|
from digitalio import DigitalInOut, Direction, Pull
|
|
|
|
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):
|
|
switch_led = leds[i] # find the switch LED
|
|
k = buttonkeys[i] # get the corresp. keycode/str
|
|
switch_led.value = True # turn on LED
|
|
kbd.press(k) # send keycode
|
|
|
|
|
|
def releasebutton(i):
|
|
switch_led = leds[i] # find the switch LED
|
|
k = buttonkeys[i] # get the corresp. keycode/str
|
|
switch_led.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 is False: # button is pressed?
|
|
buttonspressed[i] = True # save pressed button
|
|
# was button not pressed last time?
|
|
if buttonspressedlast[i] is False:
|
|
print("Pressed #%d" % i)
|
|
pressbutton(i)
|
|
else:
|
|
buttonspressed[i] = False # button was not pressed
|
|
if buttonspressedlast[i] is 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)
|