Skip to content

Commit 22f2257

Browse files
Merge pull request #59 from FrameworkComputer/more-patterns
2 parents 92e0c87 + 1ab6f20 commit 22f2257

File tree

1 file changed

+94
-15
lines changed

1 file changed

+94
-15
lines changed

ledmatrix_control.py

+94-15
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,19 @@ class GameControlVal(IntEnum):
106106
'"PANIC"',
107107
'"LOTUS" Top Down',
108108
'All brightness levels (1 LED each)',
109+
'Every Second Row',
110+
'Every Third Row',
111+
'Every Fourth Row',
112+
'Every Fifth Row',
113+
'Every Sixth Row',
114+
'Every Second Col',
115+
'Every Third Col',
116+
'Every Fourth Col',
117+
'Every Fifth Col',
118+
'Checkerboard',
119+
'Double Checkerboard',
120+
'Triple Checkerboard',
121+
'Quad Checkerboard'
109122
]
110123
DRAW_PATTERNS = ['off', 'on', 'foo']
111124
GREYSCALE_DEPTH = 32
@@ -578,6 +591,36 @@ def set_color(color):
578591
send_command(dev, CommandVals.SetColor, rgb)
579592

580593

594+
def checkerboard(dev, n):
595+
with serial.Serial(dev.device, 115200) as s:
596+
for x in range(0, WIDTH):
597+
vals = (([0xFF] * n) + ([0x00] * n)) * int(HEIGHT/2)
598+
if x % (n*2) < n:
599+
# Rotate once
600+
vals = vals[n:] + vals[:n]
601+
602+
send_col(s, x, vals)
603+
commit_cols(s)
604+
605+
606+
def every_nth_col(dev, n):
607+
with serial.Serial(dev.device, 115200) as s:
608+
for x in range(0, WIDTH):
609+
vals = [(0xFF if x % n == 0 else 0) for _ in range(HEIGHT)]
610+
611+
send_col(s, x, vals)
612+
commit_cols(s)
613+
614+
615+
def every_nth_row(dev, n):
616+
with serial.Serial(dev.device, 115200) as s:
617+
for x in range(0, WIDTH):
618+
vals = [(0xFF if y % n == 0 else 0) for y in range(HEIGHT)]
619+
620+
send_col(s, x, vals)
621+
commit_cols(s)
622+
623+
581624
def all_brightnesses(dev):
582625
"""Increase the brightness with each pixel.
583626
Only 0-255 available, so it can't fill all 306 LEDs"""
@@ -938,6 +981,32 @@ def pattern(dev, p):
938981
send_command(dev, CommandVals.Pattern, [PatternVals.DisplayLotus2])
939982
elif p == 'All brightness levels (1 LED each)':
940983
all_brightnesses(dev)
984+
elif p == 'Every Second Row':
985+
every_nth_row(dev, 2)
986+
elif p == 'Every Third Row':
987+
every_nth_row(dev, 3)
988+
elif p == 'Every Fourth Row':
989+
every_nth_row(dev, 4)
990+
elif p == 'Every Fifth Row':
991+
every_nth_row(dev, 5)
992+
elif p == 'Every Sixth Row':
993+
every_nth_row(dev, 6)
994+
elif p == 'Every Second Col':
995+
every_nth_col(dev, 2)
996+
elif p == 'Every Third Col':
997+
every_nth_col(dev, 3)
998+
elif p == 'Every Fourth Col':
999+
every_nth_col(dev, 4)
1000+
elif p == 'Every Fifth Col':
1001+
every_nth_col(dev, 4)
1002+
elif p == 'Checkerboard':
1003+
checkerboard(dev, 1)
1004+
elif p == 'Double Checkerboard':
1005+
checkerboard(dev, 2)
1006+
elif p == 'Triple Checkerboard':
1007+
checkerboard(dev, 3)
1008+
elif p == 'Quad Checkerboard':
1009+
checkerboard(dev, 4)
9411010
else:
9421011
print("Invalid pattern")
9431012

@@ -1044,8 +1113,8 @@ def gui(devices):
10441113
[sg.Text("Detected Devices")],
10451114
] + device_checkboxes + [
10461115
[sg.HorizontalSeparator()],
1047-
[sg.Text("Bootloader")],
1048-
[sg.Button("Bootloader")],
1116+
[sg.Text("Device Control")],
1117+
[sg.Button("Bootloader"), sg.Button("Sleep"), sg.Button("Wake")],
10491118

10501119
[sg.HorizontalSeparator()],
10511120
[sg.Text("Brightness")],
@@ -1077,11 +1146,17 @@ def gui(devices):
10771146
],
10781147

10791148
[sg.HorizontalSeparator()],
1080-
[sg.Text("Black&White Image")],
1081-
[sg.Button("Send stripe.gif", k='-SEND-BL-IMAGE-')],
1082-
1083-
[sg.Text("Greyscale Image")],
1084-
[sg.Button("Send greyscale.gif", k='-SEND-GREY-IMAGE-')],
1149+
[
1150+
sg.Column([
1151+
[sg.Text("Black&White Image")],
1152+
[sg.Button("Send stripe.gif", k='-SEND-BL-IMAGE-')]
1153+
]),
1154+
sg.VSeperator(),
1155+
sg.Column([
1156+
[sg.Text("Greyscale Image")],
1157+
[sg.Button("Send greyscale.gif", k='-SEND-GREY-IMAGE-')]
1158+
])
1159+
],
10851160

10861161
[sg.HorizontalSeparator()],
10871162
[sg.Text("Display Current Time")],
@@ -1091,11 +1166,18 @@ def gui(devices):
10911166
],
10921167

10931168
[sg.HorizontalSeparator()],
1094-
[sg.Text("Custom Text")],
1095-
[sg.Input(k='-CUSTOM-TEXT-', s=7), sg.Button("Show", k='SEND-CUSTOM-TEXT')],
1169+
[
1170+
sg.Column([
1171+
[sg.Text("Custom Text")],
1172+
[sg.Input(k='-CUSTOM-TEXT-', s=7), sg.Button("Show", k='SEND-CUSTOM-TEXT')],
1173+
]),
1174+
sg.VSeperator(),
1175+
sg.Column([
1176+
[sg.Text("Display Text with Symbols")],
1177+
[sg.Button("Send '2 5 degC thunder'", k='-SEND-TEXT-')],
1178+
])
1179+
],
10961180

1097-
[sg.Text("Display Text with Symbols")],
1098-
[sg.Button("Send '2 5 degC thunder'", k='-SEND-TEXT-')],
10991181

11001182
# TODO
11011183
# [sg.Text("Play Snake")],
@@ -1107,9 +1189,6 @@ def gui(devices):
11071189
sg.Button("Start random equalizer", k='-RANDOM-EQ-'),
11081190
sg.Button("Stop", k='-STOP-EQ-')
11091191
],
1110-
1111-
[sg.Text("Sleep")],
1112-
[sg.Button("Sleep"), sg.Button("Wake")],
11131192
# [sg.Button("Panic")]
11141193
]
11151194
window = sg.Window("LED Matrix Control", layout)
@@ -1154,7 +1233,7 @@ def gui(devices):
11541233
thread = threading.Thread(target=random_eq, args=(dev,), daemon=True)
11551234
thread.start()
11561235
else:
1157-
if event in ['-START-COUNTDOWN-', '-PLAY-SNAKE-', '-RANDOM-EQ-']:
1236+
if event in ['-START-COUNTDOWN-', '-PLAY-SNAKE-', '-RANDOM-EQ-', '-START-TIME-']:
11581237
sg.Popup('Select exactly 1 device for this action')
11591238
if event in ['-STOP-COUNTDOWN-', '-STOP-EQ-', '-STOP-TIME-']:
11601239
STOP_THREAD = True

0 commit comments

Comments
 (0)