Skip to content

Commit df18b6c

Browse files
committed
feature/hardware: Add MatrixKeyboard
Signed-off-by: lbuque <[email protected]>
1 parent 555de4e commit df18b6c

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

m5stack/libs/hardware/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@
1212
from .rfid import RFID
1313
from .rotary import Rotary
1414
from .keyboard import Keyboard
15+
from .matrix_keyboard import MatrixKeyboard

m5stack/libs/hardware/manifest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"keyboard/asciimap.py",
77
"button.py",
88
"ir.py",
9+
"matrix_keyboard.py",
910
"rfid.py",
1011
"rgb.py",
1112
"rotary.py",
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from .keyboard import Keyboard
2+
from micropython import schedule
3+
4+
class MatrixKeyboard(Keyboard):
5+
def __init__(self) -> None:
6+
super().__init__()
7+
self._keys = []
8+
self._handler = None
9+
10+
def get_key(self) -> int:
11+
if self._keys:
12+
return self._keys.pop(0)
13+
else:
14+
return None
15+
16+
def get_string(self) -> str:
17+
return chr(self.get_key())
18+
19+
def is_pressed(self) -> bool:
20+
if self._keys:
21+
return True
22+
else:
23+
return False
24+
25+
def set_callback(self, handler) -> None:
26+
self._handler = handler
27+
28+
def tick(self) -> None:
29+
self.updateKeyList()
30+
self.updateKeysState()
31+
if self.isChange():
32+
if self.isPressed():
33+
status = self.keysState()
34+
if status.tab:
35+
self._keys.append(0x09)
36+
elif status.enter:
37+
self._keys.append(0x0D)
38+
elif status.delete:
39+
self._keys.append(0x08)
40+
elif status.space:
41+
self._keys.append(0x20)
42+
else:
43+
for word in status.word:
44+
self._keys.append(word)
45+
if self.is_pressed() and self._handler:
46+
schedule(self._handler, self)

0 commit comments

Comments
 (0)