@@ -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]
110123DRAW_PATTERNS = ['off' , 'on' , 'foo' ]
111124GREYSCALE_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+
581624def 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