@@ -106,6 +106,19 @@ class GameControlVal(IntEnum):
106
106
'"PANIC"' ,
107
107
'"LOTUS" Top Down' ,
108
108
'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'
109
122
]
110
123
DRAW_PATTERNS = ['off' , 'on' , 'foo' ]
111
124
GREYSCALE_DEPTH = 32
@@ -578,6 +591,36 @@ def set_color(color):
578
591
send_command (dev , CommandVals .SetColor , rgb )
579
592
580
593
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
+
581
624
def all_brightnesses (dev ):
582
625
"""Increase the brightness with each pixel.
583
626
Only 0-255 available, so it can't fill all 306 LEDs"""
@@ -938,6 +981,32 @@ def pattern(dev, p):
938
981
send_command (dev , CommandVals .Pattern , [PatternVals .DisplayLotus2 ])
939
982
elif p == 'All brightness levels (1 LED each)' :
940
983
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 )
941
1010
else :
942
1011
print ("Invalid pattern" )
943
1012
@@ -1044,8 +1113,8 @@ def gui(devices):
1044
1113
[sg .Text ("Detected Devices" )],
1045
1114
] + device_checkboxes + [
1046
1115
[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" ) ],
1049
1118
1050
1119
[sg .HorizontalSeparator ()],
1051
1120
[sg .Text ("Brightness" )],
@@ -1077,11 +1146,17 @@ def gui(devices):
1077
1146
],
1078
1147
1079
1148
[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
+ ],
1085
1160
1086
1161
[sg .HorizontalSeparator ()],
1087
1162
[sg .Text ("Display Current Time" )],
@@ -1091,11 +1166,18 @@ def gui(devices):
1091
1166
],
1092
1167
1093
1168
[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
+ ],
1096
1180
1097
- [sg .Text ("Display Text with Symbols" )],
1098
- [sg .Button ("Send '2 5 degC thunder'" , k = '-SEND-TEXT-' )],
1099
1181
1100
1182
# TODO
1101
1183
# [sg.Text("Play Snake")],
@@ -1107,9 +1189,6 @@ def gui(devices):
1107
1189
sg .Button ("Start random equalizer" , k = '-RANDOM-EQ-' ),
1108
1190
sg .Button ("Stop" , k = '-STOP-EQ-' )
1109
1191
],
1110
-
1111
- [sg .Text ("Sleep" )],
1112
- [sg .Button ("Sleep" ), sg .Button ("Wake" )],
1113
1192
# [sg.Button("Panic")]
1114
1193
]
1115
1194
window = sg .Window ("LED Matrix Control" , layout )
@@ -1154,7 +1233,7 @@ def gui(devices):
1154
1233
thread = threading .Thread (target = random_eq , args = (dev ,), daemon = True )
1155
1234
thread .start ()
1156
1235
else :
1157
- if event in ['-START-COUNTDOWN-' , '-PLAY-SNAKE-' , '-RANDOM-EQ-' ]:
1236
+ if event in ['-START-COUNTDOWN-' , '-PLAY-SNAKE-' , '-RANDOM-EQ-' , '-START-TIME-' ]:
1158
1237
sg .Popup ('Select exactly 1 device for this action' )
1159
1238
if event in ['-STOP-COUNTDOWN-' , '-STOP-EQ-' , '-STOP-TIME-' ]:
1160
1239
STOP_THREAD = True
0 commit comments