KeyboardEmulator

From Sketching with Hardware at LMU Wiki
Jump to navigation Jump to search

Keyboard Emulator in CircuitPython

Connect D2 to GND to activate Keyboard

Acts as Keyboard: Cp10.png

No Keyboard output: Cp12.png

code for the keyboard emulator

 1 #"""based on CircuitPython Essentials HID Keyboard example"""
 2 
 3 # IF you connect D2 and GND it acts as keyboard
 4 
 5 import time
 6 import board
 7 import digitalio
 8 from digitalio import DigitalInOut, Direction, Pull
 9 import usb_hid
10 from adafruit_hid.keyboard import Keyboard
11 from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
12 from adafruit_hid.keycode import Keycode
13 from adafruit_lsm6ds.lsm6dsox import LSM6DSOX
14 
15 i2c = board.I2C()  # uses board.SCL and board.SDA
16 # i2c = board.STEMMA_I2C()  # For using the built-in STEMMA QT connector on a microcontroller
17 sensor = LSM6DSOX(i2c)
18 
19 led = digitalio.DigitalInOut(board.LED)
20 led.direction = digitalio.Direction.OUTPUT
21 
22 switch = DigitalInOut(board.D2)
23 switch.direction = Direction.INPUT
24 switch.pull = Pull.UP
25 
26 def sensorRead():
27         a=(sensor.acceleration)
28         g=(sensor.gyro)
29         return (a+g)
30 
31 # The keyboard object!
32 time.sleep(1)  # Sleep for a bit to avoid a race condition on some systems
33 keyboard = Keyboard(usb_hid.devices)
34 keyboard_layout = KeyboardLayoutUS(keyboard)  # We're in the US :)
35 
36 
37 while True:
38     readings = []
39     
40     for _ in range(100):
41         reading = sensorRead()
42         readings.append(reading)
43         time.sleep(0.02)  # Sleep for 100 milliseconds
44     
45     sum_absolute_differences = [0] * 6
46 
47     for i in range(1, len(readings)):
48         for j in range(6):  # Assuming each reading has 6 components
49             sum_absolute_differences[j] += abs(readings[i][j] - readings[i-1][j])
50     
51     x = sum(sum_absolute_differences)
52     print(x)
53     
54     #for i, reading in enumerate(readings):
55         #print(f"Reading {i+1}: {reading}")
56     
57     if switch.value:
58         led.value = False
59         write2keyboard = False
60         #print("Off")
61     else:
62         led.value = True
63         write2keyboard = True
64         #print("On")
65 
66     #if write2keyboard: 
67     #    keyboard.press(Keycode.SHIFT, Keycode.A)
68     #    keyboard.press(Keycode.ENTER)
69 
70     if 0 <= x <= 20:
71         print("nothing")
72     elif 20 < x <= 180:
73         print("nice, I like this")
74         if write2keyboard:
75             keyboard_layout.write("nice, I like this\n")
76     elif 180 < x <= 300:
77         print("are you careful?")
78         if write2keyboard:
79             keyboard_layout.write("are zou careful?\n")
80     elif 300 < x <= 400:
81         print("be careful with me!")
82         if write2keyboard:
83             keyboard_layout.write("be careful with me!\n")
84     elif 400 < x <= 600:
85         print("no this is not nice!")
86         if write2keyboard:
87             keyboard_layout.write("no this is not nice!\n")
88     elif 600 < x <= 800:
89         print("this hurts!!!")
90         if write2keyboard:
91             keyboard_layout.write("this hurts!!!\n")
92     elif x > 800:
93         print("you are killing me")
94         if write2keyboard:
95             keyboard_layout.write("zou are killing me\n")
96     else:
97         print("Value out of range")