Skip to content

Commit 6185fce

Browse files
committed
better organized code
1 parent 43902ad commit 6185fce

File tree

9 files changed

+149
-92
lines changed

9 files changed

+149
-92
lines changed
File renamed without changes.
File renamed without changes.

mpy/boards/portal.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# Others in
2+
# https://docs.circuitpython.org/projects/displayio-layout/en/latest/examples.html
3+
4+
# SPDX-FileCopyrightText: 2021 Kevin Matocha
5+
#
6+
# SPDX-License-Identifier: MIT
7+
8+
# DEMO:
9+
# from toggle import led, loop
10+
11+
"""
12+
Creates a single sliding switch widget.
13+
"""
14+
15+
import time
16+
import board
17+
import displayio
18+
import adafruit_touchscreen
19+
from adafruit_displayio_layout.widgets.switch_round import SwitchRound as _Switch
20+
21+
_display = board.DISPLAY
22+
23+
_width = _display.width
24+
_height = _display.height
25+
26+
_center = {
27+
"x": int(_width / 2),
28+
"y": int(_height / 2),
29+
}
30+
31+
_ts = adafruit_touchscreen.Touchscreen(
32+
board.TOUCH_XL,
33+
board.TOUCH_XR,
34+
board.TOUCH_YD,
35+
board.TOUCH_YU,
36+
calibration=((5200, 59000), (5800, 57000)),
37+
size=(_width, _height),
38+
)
39+
40+
# Create the switch
41+
_my_switch = _Switch(
42+
_center["x"] - 25,
43+
_center["y"] - 15,
44+
)
45+
46+
47+
_my_group = displayio.Group()
48+
_my_group.append(_my_switch)
49+
50+
# Add my_group to the display
51+
_display.root_group = _my_group
52+
53+
class PortalLed:
54+
def __init__(self, point):
55+
self._p = point
56+
57+
def on(self):
58+
global _selected
59+
if not _selected:
60+
_selected = not _selected
61+
_my_switch.selected(self._p)
62+
63+
def off(self):
64+
global _selected
65+
if _selected:
66+
_selected = not _selected
67+
_my_switch.selected(self._p)
68+
69+
def value(self):
70+
if _selected:
71+
return 1
72+
else:
73+
return 0
74+
75+
_selected = False
76+
77+
led = PortalLed((
78+
_center["x"], # x
79+
_center["y"], # y
80+
42000, # pressure
81+
))
82+
83+
def loop():
84+
global _selected
85+
print("Ctrl+C or Ctrl+D to break the loop")
86+
while True:
87+
p = _ts.touch_point # get any touches on the screen
88+
89+
if p: # Check each switch if the touch point is within the switch touch area
90+
# If touched, then flip the switch with .selected
91+
if _my_switch.contains(p):
92+
_selected = not _selected
93+
_my_switch.selected(p)
94+
95+
time.sleep(0.05) # touch response on PyPortal is more accurate with a small delay
File renamed without changes.

mpy/circuit.py

Lines changed: 0 additions & 47 deletions
This file was deleted.

mpy/events.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from pyscript.js_modules.dedent import default as dedent
2+
3+
4+
def keydown(board):
5+
async def on(event):
6+
if event.code == "Enter":
7+
import asyncio, json
8+
target = event.target
9+
value = json.dumps(target.value)
10+
target.value = ""
11+
board.eval(dedent(f"""
12+
from hub import light_matrix
13+
14+
light_matrix.write({value})
15+
"""))
16+
return False
17+
return on
18+
19+
20+
def toggle(board):
21+
async def on(event):
22+
target = event.target
23+
target.disabled = True
24+
value = await board.eval(dedent(f"""
25+
led_value = led.value()
26+
led_value
27+
"""))
28+
if value == 1:
29+
await board.eval("led.off()")
30+
else:
31+
await board.eval("led.on()")
32+
target.disabled = False
33+
return False
34+
return on

mpy/index.py

Lines changed: 15 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,19 @@
11
from pyscript import document, window
2-
32
from pyscript.js_modules.micro_repl import default as Board
4-
from pyscript.js_modules.dedent import default as dedent
5-
6-
async def on_keydown(event):
7-
if event.code == "Enter":
8-
import asyncio, json
9-
value = json.dumps(message.value)
10-
message.value = ""
11-
# await board.write(f"""print("showing:", {value})\r\n""")
12-
# await asyncio.sleep(0.1)
13-
board.eval(dedent(f"""
14-
from hub import light_matrix
15-
16-
light_matrix.write({value})
17-
"""))
18-
return False
19-
20-
async def on_toggle(event):
21-
led.disabled = True
22-
value = await board.eval(dedent(f"""
23-
led_value = led.value()
24-
led_value
25-
"""))
26-
if value == 1:
27-
await board.eval("led.off()")
28-
else:
29-
await board.eval("led.on()")
30-
led.disabled = False
313

4+
# setup the board
325
def on_connect():
33-
print("connected")
6+
from events import keydown, toggle
347
connect.disabled = True
358
reset.disabled = False
369
if board.name == "SPIKE Prime with STM32F413":
3710
message.hidden = False
38-
message.onkeydown = on_keydown
11+
message.onkeydown = keydown(board)
3912
else:
4013
led.hidden = False
41-
led.onclick = on_toggle
14+
led.onclick = toggle(board)
4215

4316
def on_disconnect():
44-
print("disconnected")
4517
connect.disabled = False
4618
reset.disabled = True
4719
led.hidden = True
@@ -50,22 +22,23 @@ def on_disconnect():
5022
def on_error(error):
5123
window.console.warn(error)
5224

53-
async def on_reset(error):
54-
reset.disabled = True
55-
board.terminal.reset()
56-
await board.reset()
57-
reset.disabled = False
58-
59-
async def on_click(event):
60-
await board.connect(output)
61-
window.board = board
62-
6325
board = Board({
6426
"onconnect": on_connect,
6527
"ondisconnect": on_disconnect,
6628
"onerror": on_error,
6729
})
6830

31+
# setup the DOM
32+
async def on_click(event):
33+
await board.connect(output)
34+
window.board = board
35+
36+
async def on_reset(error):
37+
reset.disabled = True
38+
board.terminal.reset()
39+
await board.reset()
40+
reset.disabled = False
41+
6942
connect, reset, led, message, output, = document.querySelectorAll(
7043
"#connect, #reset, #led, #message, #output"
7144
)

mpy/index.toml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
[js_modules.main]
2-
"https://cdn.jsdelivr.net/npm/codedent/+esm" = "dedent"
3-
"../serial.js" = "micro_repl"
4-
# "https://esm.run/micro-repl/serial" = "micro_repl"
2+
"https://esm.run/codedent" = "dedent"
3+
"https://esm.run/micro-repl/serial" = "micro_repl"
4+
5+
[files]
6+
"./events.py" = "./"

mpy/test.py renamed to mpy/loop.py

File renamed without changes.

0 commit comments

Comments
 (0)