-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathble-morsecode-neokey.py
More file actions
180 lines (159 loc) · 5.89 KB
/
Copy pathble-morsecode-neokey.py
File metadata and controls
180 lines (159 loc) · 5.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
import board
import time
import digitalio
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
import adafruit_ble
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.standard.hid import HIDService
from micropython import const
from adafruit_neokey.neokey1x4 import NeoKey1x4
# Enable the ble radio
ble = adafruit_ble.BLERadio()
# create HID Service
hid = HIDService()
# Create Advertisement
advertisement = ProvideServicesAdvertisement(hid)
# Create Keyboard Object
k = Keyboard(hid.devices)
kl = KeyboardLayoutUS(k)
# use default I2C bus
i2c_bus = board.I2C()
# Create a NeoKey object
neokey = NeoKey1x4(i2c_bus, addr=0x30)
# states for key presses
key_0_state = False
key_1_state = False
key_2_state = False
key_3_state = False
morsecode = ""
MorseCodes = {
'a' : '.-',
'b' : '-...',
'c' : '-.-.',
'd' : '-..',
'e' : '.',
'f' : '..-.',
'g' : '--.',
'h' : '....',
'i' : '..',
'j' : '.---',
'k' : '-.-',
'l' : '.-..',
'm' : '--',
'n' : '-.',
'o' : '---',
'p' : '.--.',
'q' : '--.-',
'r' : '.-.',
's' : '...',
't' : '-',
'u' : '..-',
'v' : '...-',
'w' : '.--',
'x' : '-..-',
'y' : '-.--',
'z' : '--..',
'0' : '-----',
'1' : '.----',
'2' : '..---',
'3' : '...--',
'4' : '....-',
'5' : '.....',
'6' : '-....',
'7' : '--...',
'8' : '---..',
'9' : '----.',
'.' : '.-.-.-',
',' : '--..--',
'?' : '..--..',
'\'' : '.----.',
'!' : '-.-.--',
'/' : '-..-.',
'(' : '-.--.',
')' : '-.--.-',
'&' : '.-...',
':' : '---...',
';' : '-.-.-.',
'=' : '-...-',
'+' : '.-.-.',
'-' : '-....-',
'_' : '..--.-',
'@' : '.--.-.',
'"' : '.-..-.',
'*' : '...-.',
'\\' : '-.-.-',
'%' : '---.-',
'#' : '--.-.',
'|' : '--.-.-',
'^' : '......',
'~' : '.---..',
'`' : '-..-.-',
'$' : '...-..',
'[' : '.--..',
']' : '.--..-',
'{' : '.--.-',
'}' : '.--.--',
'<' : '-.---',
'>' : '-.----',
' ' : '..--',
'\n' : '.-.-',
'\b' : '----'
}
# Lookup the right character in the dictionary
def keycodeLookup(keystring):
# For every item in the dictionary
for c in MorseCodes:
# If this is the keycode we are looking for
if MorseCodes[c] == keystring:
# Return the matching keycode
return c
# If we don't find anything return an empty string
return ''
c = ''
while True:
ble.start_advertising(advertisement) # Start advertising
while not ble.connected: # Wait for connection
pass
while ble.connected:
# switch debouncing
# also turns off NeoPixel on release
if not neokey[0] and key_0_state:
key_0_state = False
neokey.pixels[0] = 0x0
if not neokey[1] and key_1_state:
key_1_state = False
neokey.pixels[1] = 0x0
if not neokey[2] and key_2_state:
key_2_state = False
neokey.pixels[2] = 0x0
if not neokey[3] and key_3_state:
key_3_state = False
neokey.pixels[3] = 0x0
if neokey[0] and not key_0_state:
neokey.pixels[0] = 0xFF0000
c = keycodeLookup(morsecode)
kl.write(c)
morsecode = ''
c = ''
print("\n", end="")
key_0_state = True
if neokey[1] and not key_1_state:
neokey.pixels[1] = 0xFFFF00
key_1_state = True
morsecode += ' '
print(" ", end="")
kl.write(morsecode)
morsecode = ''
if neokey[2] and not key_2_state:
neokey.pixels[2] = 0x00FF00
morsecode += '-'
print("-", end="")
key_2_state = True
if neokey[3] and not key_3_state:
neokey.pixels[3] = 0x00FFFF
morsecode += '.'
print(".", end="")
key_3_state = True
time.sleep(0.03)