
Quite a while back, October 2019, I was trying to see what I could make the Adafruit PyGamer badge do. I kept adding things to the code until I caused it to crash. It would crash in about 10 seconds sometimes. Others it would take a few hours. I was putting it through the paces.
While I was at Hackaday Supercon I showed the badge to some acquaintances. Later that day they said Scott Shawcroft, the maintainer of CircuitPython, wanted to check out the code. Scott stopped by the tables where we were soldering and coding. We were introduced and Scott asked to check out the PyGamer. He watched it crash in about five minutes and asked to check out the code on my laptop.
Back then, when the program would crash on the PyGamer, I would have to reinstall CircuitPython on to the device. Scott thought there might be a leak overwriting into CircuitPython. I zipped the files on the PyGamer and emailed them to Scott as we talked.
The attendees of Supercon received a new device from Adafruit while at the con. It was the EdgeBadge. I put my program onto the new device and it ran with no changes. It also crashed in a few minutes. After about an hour messing with the code on my new toy, the EdgeBadge died. I was wondering if the code was too much for the device.
Here is a copy of the code that would cause the PyGamer to crash with the older version of CircuitPython. I am trying to find a suitable plugin for listing long sections of code. Something to display long sets of code in a scrollable box.
# Write your code here :-) # GreenRain.py import board import neopixel import digitalio import displayio import gamepadshift import time import terminalio import array import math import random import audioio from adafruit_display_text import label from adafruit_bitmap_font import bitmap_font from adafruit_display_shapes.rect import Rect display = board.DISPLAY FREQUENCY = 2093 # 440 Hz middle 'A' SAMPLERATE = 2 * FREQUENCY # 8000 samples/second, recommended! # Generate one period of sine wav. length = SAMPLERATE // FREQUENCY sine_wave = array.array("H", [0] * length) for i in range(length): sine_wave[i] = int(math.sin(math.pi * 2 * i / 18) * (2 ** 15) + 2 ** 15) # enable the speaker speaker_enable = digitalio.DigitalInOut(board.SPEAKER_ENABLE) speaker_enable.direction = digitalio.Direction.OUTPUT speaker_enable.value = True audio = audioio.AudioOut(board.A0) sine_wave_sample = audioio.RawSample(sine_wave) led = neopixel.NeoPixel(board.NEOPIXEL, 5) i = 0 led_speed = 200 red = (50, 0, 0) blue = (0, 0, 50) yellow = (50, 50, 0) green = (0, 50, 0) white = (50, 50, 50) purple = (50, 0, 50) pushed = 0 the_color = [red, blue, yellow, green, white, purple] fid_color = [0xFF0000, 0x0000FF, 0xFFFF00, 0x00FF00, 0xFFFFFF, 0xFF00FF, 0x000000] myX = 0 myY = 0 ledCheck = 0 ledOn = 0 soundTimer = 0 font = terminalio.FONT # font = bitmap_font.load_font("fonts/Checkbook-25.bdf") font2 = bitmap_font.load_font("SourceSerifPro_25.bdf") font3 = bitmap_font.load_font("SourceSerifPro_12.bdf") font4 = bitmap_font.load_font("SourceSerifPro_52.bdf") text_area = label.Label(font2, text="Hello", color=0xFFFFFF) text_area.x = 48 text_area.y = 10 text_area2 = label.Label(font3, text="My Name Is", color=0xFFFFFF) text_area2.x = 45 text_area2.y = 30 text_area3 = label.Label(font4, text="fid", color=0xFF0000) text_area3.x = 45 text_area3.y = 80 j = 0 k = 0 my_color = the_color[j] speedCheck = 10 pad = gamepadshift.GamePadShift(digitalio.DigitalInOut(board.BUTTON_CLOCK), digitalio.DigitalInOut(board.BUTTON_OUT), digitalio.DigitalInOut(board.BUTTON_LATCH)) # Open the file with open("/purple.bmp", "rb") as bitmap_file: # Setup the file as the bitmap data source bitmap = displayio.OnDiskBitmap(bitmap_file) # Create a TileGrid to hold the bitmap tile_grid = displayio.TileGrid(bitmap, pixel_shader=displayio.ColorConverter()) rect_back = Rect(0, 0, 160, 128, fill=0x000000) rect_red = Rect(35, 0, 85, 40, fill=0xff0000) rect_white = Rect(17, 50, 120, 55, fill=0xAAAAAA) rect0 = Rect(0, 0, 3, 3, fill=0x00FF00) rect1 = Rect(4, 0, 3, 3, fill=0x00FF00) rect2 = Rect(8, 0, 3, 3, fill=0x00FF00) rect3 = Rect(12, 0, 3, 3, fill=0x00FF00) rect4 = Rect(16, 0, 3, 3, fill=0x00FF00) rect5 = Rect(20, 0, 3, 3, fill=0x00FF00) rect6 = Rect(24, 0, 3, 3, fill=0x00FF00) rect7 = Rect(28, 0, 3, 3, fill=0x00FF00) rect8 = Rect(32, 0, 3, 3, fill=0x00FF00) rect9 = Rect(36, 0, 3, 3, fill=0x00FF00) rect10 = Rect(40, 0, 3, 3, fill=0x00FF00) rect11 = Rect(44, 0, 3, 3, fill=0x00FF00) rect12 = Rect(48, 0, 3, 3, fill=0x00FF00) rect13 = Rect(52, 0, 3, 3, fill=0x00FF00) rect14 = Rect(56, 0, 3, 3, fill=0x00FF00) rect15 = Rect(60, 0, 3, 3, fill=0x00FF00) rect16 = Rect(64, 0, 3, 3, fill=0x00FF00) rect17 = Rect(68, 0, 3, 3, fill=0x00FF00) rect18 = Rect(72, 0, 3, 3, fill=0x00FF00) rect19 = Rect(76, 0, 3, 3, fill=0x00FF00) rect20 = Rect(80, 0, 3, 3, fill=0x00FF00) rect21 = Rect(84, 0, 3, 3, fill=0x00FF00) rect22 = Rect(88, 0, 3, 3, fill=0x00FF00) rect23 = Rect(92, 0, 3, 3, fill=0x00FF00) rect24 = Rect(96, 0, 3, 3, fill=0x00FF00) rect25 = Rect(100, 0, 3, 3, fill=0x00FF00) rect26 = Rect(104, 0, 3, 3, fill=0x00FF00) rect27 = Rect(108, 0, 3, 3, fill=0x00FF00) rect28 = Rect(112, 0, 3, 3, fill=0x00FF00) rect29 = Rect(116, 0, 3, 3, fill=0x00FF00) rect30 = Rect(120, 0, 3, 3, fill=0x00FF00) rect31 = Rect(124, 0, 3, 3, fill=0x00FF00) rect32 = Rect(128, 0, 3, 3, fill=0x00FF00) rect33 = Rect(132, 0, 3, 3, fill=0x00FF00) rect34 = Rect(136, 0, 3, 3, fill=0x00FF00) rect35 = Rect(140, 0, 3, 3, fill=0x00FF00) rect36 = Rect(144, 0, 3, 3, fill=0x00FF00) rect37 = Rect(148, 0, 3, 3, fill=0x00FF00) rect38 = Rect(152, 0, 3, 3, fill=0x00FF00) rect39 = Rect(156, 0, 3, 3, fill=0x00FF00) slow0 = (random.randint(0, 10) * 20) + speedCheck slow1 = (random.randint(0, 10) * 20) + speedCheck slow2 = (random.randint(0, 10) * 20) + speedCheck slow3 = (random.randint(0, 10) * 20) + speedCheck slow4 = (random.randint(0, 10) * 20) + speedCheck slow5 = (random.randint(0, 10) * 20) + speedCheck slow6 = (random.randint(0, 10) * 20) + speedCheck slow7 = (random.randint(0, 10) * 20) + speedCheck slow8 = (random.randint(0, 10) * 20) + speedCheck slow9 = (random.randint(0, 10) * 20) + speedCheck slow10 = (random.randint(0, 10) * 20) + speedCheck slow11 = (random.randint(0, 10) * 20) + speedCheck slow12 = (random.randint(0, 10) * 20) + speedCheck slow13 = (random.randint(0, 10) * 20) + speedCheck slow14 = (random.randint(0, 10) * 20) + speedCheck slow15 = (random.randint(0, 10) * 20) + speedCheck slow16 = (random.randint(0, 10) * 20) + speedCheck slow17 = (random.randint(0, 10) * 20) + speedCheck slow18 = (random.randint(0, 10) * 20) + speedCheck slow19 = (random.randint(0, 10) * 20) + speedCheck slow20 = (random.randint(0, 10) * 20) + speedCheck slow21 = (random.randint(0, 10) * 20) + speedCheck slow22 = (random.randint(0, 10) * 20) + speedCheck slow23 = (random.randint(0, 10) * 20) + speedCheck slow24 = (random.randint(0, 10) * 20) + speedCheck slow25 = (random.randint(0, 10) * 20) + speedCheck slow26 = (random.randint(0, 10) * 20) + speedCheck slow27 = (random.randint(0, 10) * 20) + speedCheck slow28 = (random.randint(0, 10) * 20) + speedCheck slow29 = (random.randint(0, 10) * 20) + speedCheck slow30 = (random.randint(0, 10) * 20) + speedCheck slow31 = (random.randint(0, 10) * 20) + speedCheck slow32 = (random.randint(0, 10) * 20) + speedCheck slow33 = (random.randint(0, 10) * 20) + speedCheck slow34 = (random.randint(0, 10) * 20) + speedCheck slow35 = (random.randint(0, 10) * 20) + speedCheck slow36 = (random.randint(0, 10) * 20) + speedCheck slow37 = (random.randint(0, 10) * 20) + speedCheck slow38 = (random.randint(0, 10) * 20) + speedCheck slow39 = (random.randint(0, 10) * 20) + speedCheck speed0 = 0 speed1 = 0 speed2 = 0 speed3 = 0 speed4 = 0 speed5 = 0 speed6 = 0 speed7 = 0 speed8 = 0 speed9 = 0 speed10 = 0 speed11 = 0 speed12 = 0 speed13 = 0 speed14 = 0 speed15 = 0 speed16 = 0 speed17 = 0 speed18 = 0 speed19 = 0 speed20 = 0 speed21 = 0 speed22 = 0 speed23 = 0 speed24 = 0 speed25 = 0 speed26 = 0 speed27 = 0 speed28 = 0 speed29 = 0 speed30 = 0 speed31 = 0 speed32 = 0 speed33 = 0 speed34 = 0 speed35 = 0 speed36 = 0 speed37 = 0 speed38 = 0 speed39 = 0 # Create a Group to hold the TileGrid group = displayio.Group(max_size=50) # Add the TileGrid to the Group group.append(rect_back) # group.append(rect_red) # group.append(rect_white) group.append(text_area) group.append(text_area2) group.append(text_area3) group.append(rect0) group.append(rect1) group.append(rect2) group.append(rect3) group.append(rect4) group.append(rect5) group.append(rect6) group.append(rect7) group.append(rect8) group.append(rect9) group.append(rect10) group.append(rect11) group.append(rect12) group.append(rect13) group.append(rect14) group.append(rect15) group.append(rect16) group.append(rect17) group.append(rect18) group.append(rect19) group.append(rect20) group.append(rect21) group.append(rect22) group.append(rect23) group.append(rect24) group.append(rect25) group.append(rect26) group.append(rect27) group.append(rect28) group.append(rect29) group.append(rect30) group.append(rect31) group.append(rect32) group.append(rect33) group.append(rect34) group.append(rect35) group.append(rect36) group.append(rect37) group.append(rect38) group.append(rect39) # Add the Group to the Display display.show(group) while True: if ledCheck > led_speed: if ledOn == 0: led[i] = (my_color) ledOn = 1 else: led[i] = (0, 0, 0) ledOn = 0 i += 1 if i == 5: i = 0 ledCheck = 0 ledCheck += 1 if pushed ==1: soundTimer += 1 if soundTimer == 300: audio.stop() pressed = pad.get_pressed() if pressed == 0: pushed = 0 audio.stop() if pushed == 0: pressed = pad.get_pressed() if pressed == 0x01: led_speed += .05 if pressed == 0x02: led_speed -= .05 if led_speed > 500: led_speed = 500 if led_speed < 10: led_speed = 10 if pressed == 0x04: j += 1 if j > len(the_color) - 1: j = 0 my_color = the_color[j] pushed = 1 soundTimer = 0 audio.play(sine_wave_sample, loop=True) if pressed == 0x08: pushed = 1 k += 1 if k > len(fid_color) - 1: k = 0 text_area3.color = fid_color[k] speed0 += 1 speed1 += 1 speed2 += 1 speed3 += 1 speed4 += 1 speed5 += 1 speed6 += 1 speed7 += 1 speed8 += 1 speed9 += 1 speed10 += 1 speed11 += 1 speed12 += 1 speed13 += 1 speed14 += 1 speed15 += 1 speed16 += 1 speed17 += 1 speed18 += 1 speed19 += 1 speed20 += 1 speed21 += 1 speed22 += 1 speed23 += 1 speed24 += 1 speed25 += 1 speed26 += 1 speed27 += 1 speed28 += 1 speed29 += 1 speed30 += 1 speed31 += 1 speed32 += 1 speed33 += 1 speed34 += 1 speed35 += 1 speed36 += 1 speed37 += 1 speed38 += 1 speed39 += 1 if speed0 > slow0: speed0 = 0 slow0 = (random.randint(0, 10) * 20) + speedCheck rect0.y += 4 if rect0.y > 126: rect0.y = 0 if speed1 > slow1: speed1 = 0 slow1 = (random.randint(0, 10) * 20) + speedCheck rect1.y += 4 if rect1.y > 126: rect1.y = 0 if speed2 > slow2: speed2 = 0 slow2 = (random.randint(0, 10) * 20) + speedCheck rect2.y += 4 if rect2.y > 126: rect2.y = 0 if speed3 > slow3: speed3 = 0 slow3 = (random.randint(0, 10) * 20) + speedCheck rect3.y += 4 if rect3.y > 126: rect3.y = 0 if speed4 > slow4: speed4 = 0 slow4 = (random.randint(0, 10) * 20) + speedCheck rect4.y += 4 if rect4.y > 126: rect4.y = 0 if speed5 > slow5: speed5 = 0 slow5 = (random.randint(0, 10) * 20) + speedCheck rect5.y += 4 if rect5.y > 126: rect5.y = 0 if speed6 > slow6: speed6 = 0 slow6 = (random.randint(0, 10) * 20) + speedCheck rect6.y += 4 if rect6.y > 126: rect6.y = 0 if speed7 > slow7: speed7 = 0 slow7 = (random.randint(0, 10) * 20) + speedCheck rect7.y += 4 if rect7.y > 126: rect7.y = 0 if speed8 > slow8: speed8 = 0 slow8 = (random.randint(0, 10) * 20) + speedCheck rect8.y += 4 if rect8.y > 126: rect8.y = 0 if speed9 > slow9: speed9 = 0 slow9 = (random.randint(0, 10) * 20) + speedCheck rect9.y += 4 if rect9.y > 126: rect9.y = 0 if speed10 > slow10: speed10 = 0 slow10 = (random.randint(0, 10) * 20) + speedCheck rect10.y += 4 if rect10.y > 126: rect10.y = 0 if speed11 > slow11: speed11 = 0 slow11 = (random.randint(0, 10) * 20) + speedCheck rect11.y += 4 if rect11.y > 126: rect11.y = 0 if speed12 > slow12: speed12 = 0 slow12 = (random.randint(0, 10) * 20) + speedCheck rect12.y += 4 if rect12.y > 126: rect12.y = 0 if speed13 > slow13: speed13 = 0 slow13 = (random.randint(0, 10) * 20) + speedCheck rect13.y += 4 if rect13.y > 126: rect13.y = 0 if speed14 > slow14: speed14 = 0 slow14 = (random.randint(0, 10) * 20) + speedCheck rect14.y += 4 if rect14.y > 126: rect14.y = 0 if speed15 > slow15: speed15 = 0 slow15 = (random.randint(0, 10) * 20) + speedCheck rect15.y += 4 if rect15.y > 126: rect15.y = 0 if speed16 > slow16: speed16 = 0 slow16 = (random.randint(0, 10) * 20) + speedCheck rect16.y += 4 if rect16.y > 126: rect16.y = 0 if speed17 > slow17: speed17 = 0 slow17 = (random.randint(0, 10) * 20) + speedCheck rect17.y += 4 if rect17.y > 126: rect17.y = 0 if speed18 > slow18: speed18 = 0 slow18 = (random.randint(0, 10) * 20) + speedCheck rect18.y += 4 if rect18.y > 126: rect18.y = 0 if speed19 > slow19: speed19 = 0 slow19 = (random.randint(0, 10) * 20) + speedCheck rect19.y += 4 if rect19.y > 126: rect19.y = 0 if speed20 > slow20: speed20 = 0 slow20 = (random.randint(0, 10) * 20) + speedCheck rect20.y += 4 if rect20.y > 126: rect20.y = 0 if speed21 > slow21: speed21 = 0 slow21 = (random.randint(0, 10) * 20) + speedCheck rect21.y += 4 if rect21.y > 126: rect21.y = 0 if speed22 > slow22: speed22 = 0 slow22 = (random.randint(0, 10) * 20) + speedCheck rect22.y += 4 if rect22.y > 126: rect22.y = 0 if speed23 > slow23: speed23 = 0 slow23 = (random.randint(0, 10) * 20) + speedCheck rect23.y += 4 if rect23.y > 126: rect23.y = 0 if speed24 > slow24: speed24 = 0 slow24 = (random.randint(0, 10) * 20) + speedCheck rect24.y += 4 if rect24.y > 126: rect24.y = 0 if speed25 > slow25: speed25 = 0 slow25 = (random.randint(0, 10) * 20) + speedCheck rect25.y += 4 if rect25.y > 126: rect25.y = 0 if speed26 > slow26: speed26 = 0 slow26 = (random.randint(0, 10) * 20) + speedCheck rect26.y += 4 if rect26.y > 126: rect26.y = 0 if speed27 > slow27: speed27 = 0 slow27 = (random.randint(0, 10) * 20) + speedCheck rect27.y += 4 if rect27.y > 126: rect27.y = 0 if speed28 > slow28: speed28 = 0 slow28 = (random.randint(0, 10) * 20) + speedCheck rect28.y += 4 if rect28.y > 126: rect28.y = 0 if speed29 > slow29: speed29 = 0 slow29 = (random.randint(0, 10) * 20) + speedCheck rect29.y += 4 if rect29.y > 126: rect29.y = 0 if speed30 > slow30: speed30 = 0 slow30 = (random.randint(0, 10) * 20) + speedCheck rect30.y += 4 if rect30.y > 126: rect30.y = 0 if speed31 > slow31: speed31 = 0 slow31 = (random.randint(0, 10) * 20) + speedCheck rect31.y += 4 if rect31.y > 126: rect31.y = 0 if speed32 > slow32: speed32 = 0 slow32 = (random.randint(0, 10) * 20) + speedCheck rect32.y += 4 if rect32.y > 126: rect32.y = 0 if speed33 > slow33: speed33 = 0 slow33 = (random.randint(0, 10) * 20) + speedCheck rect33.y += 4 if rect33.y > 126: rect33.y = 0 if speed34 > slow34: speed34 = 0 slow34 = (random.randint(0, 10) * 20) + speedCheck rect34.y += 4 if rect34.y > 126: rect34.y = 0 if speed35 > slow35: speed35 = 0 slow35 = (random.randint(0, 10) * 20) + speedCheck rect35.y += 4 if rect35.y > 126: rect35.y = 0 if speed36 > slow36: speed36 = 0 slow36 = (random.randint(0, 10) * 20) + speedCheck rect36.y += 4 if rect36.y > 126: rect36.y = 0 if speed37 > slow37: speed37 = 0 slow37 = (random.randint(0, 10) * 20) + speedCheck rect37.y += 4 if rect37.y > 126: rect37.y = 0 if speed38 > slow38: speed38 = 0 slow38 = (random.randint(0, 10) * 20) + speedCheck rect38.y += 4 if rect38.y > 126: rect38.y = 0 if speed39 > slow39: speed39 = 0 slow39 = (random.randint(0, 10) * 20) + speedCheck rect39.y += 4 if rect39.y > 126: rect39.y = 0
I messed with the repetitive code trying to put it into loops, or functions but didn’t have the skills, or commands to do it. I revisited this code a few times over the next few months. I decided to crunch the code down and try the code on a new version of CircuitPython. The code still crashed, but it was not as deadly as it had been. I would just press the restart button and it would start running again. Yay!!
I managed to keep crashing the PyGamer. I decided to try to use lists (arrays) to handle the loops of the ‘green rain’. That worked well, and dropped the lines of repetitive code by a lot.
Since that worked out well I decided to add another animation on the screen. Even with all this happening on the device it was still crashing. I went back onto the Adafruit forums to see if someone was also having the same kind of trouble, or post my code to have it looked at. There was a newer version of CircuitPython and even NeoPixel.mpy. Now the code is running for hours. This morning I plugged it in and it was stopped in the middle of running after a little bit of time. That must have been a fluke. I plugged it into the wall usb and hung it up on a hook around 8 this morning. It was still running at 5 this evening.
# Write your code here :-) # pygamer_dancing_fid_rev_1.py # ** Cleaning up the code. # # I am now using Lists (arrays) # for a few of the variables groups. # ** # Press Button A to speed up the LEDs cycling. # Press Button B to slow down the LEDs cycling. # Press Start to change the color of the LEDs. # Press Select to change the color of the name, fid. # # text_area3 through 5 now handles the name fid. # Each letter is handled separately. # You can change it in there. # import board import neopixel import digitalio import displayio import gamepadshift import array import math import random import audioio from adafruit_display_text import label from adafruit_bitmap_font import bitmap_font from adafruit_display_shapes.rect import Rect display = board.DISPLAY FREQUENCY = 2093 # 440 Hz middle 'A' SAMPLERATE = 2 * FREQUENCY # 8000 samples/second, recommended! # Generate one period of sine wav. length = SAMPLERATE // FREQUENCY sine_wave = array.array("H", [0] * length) for irange in range(length): sine_wave[irange] = int(math.sin(math.pi * 2 * irange / 18) * (2 ** 15) + 2 ** 15) # enable the speaker speaker_enable = digitalio.DigitalInOut(board.SPEAKER_ENABLE) speaker_enable.direction = digitalio.Direction.OUTPUT speaker_enable.value = True audio = audioio.AudioOut(board.A0) sine_wave_sample = audioio.RawSample(sine_wave) led = neopixel.NeoPixel(board.NEOPIXEL, 5) i = 0 led_speed = 200 red = (5, 0, 0) blue = (0, 0, 5) yellow = (5, 5, 0) green = (0, 5, 0) white = (5, 5, 5) purple = (5, 0, 5) pushed = 0 the_color = [red, blue, yellow, green, white, purple] fid_color = [0xFF0000, 0x0000FF, 0xFFFF00, 0x00FF00, 0xFFFFFF, 0xFF00FF, 0x000000] myX = 0 myY = 0 ledCheck = 0 ledOn = 0 soundTimer = 0 ledDirection = 1 fid_sine = [0, 1, 3, 4, 4, 5, 4, 4, 3, 1, 0, -1, -3, -4, -4, -5, -4, -4, -3, -1] fid_count = 0 f_sine_count = 10 i_sine_count = 5 d_sine_count = 0 font2 = bitmap_font.load_font("SourceSerifPro_25.bdf") font4 = bitmap_font.load_font("SourceSerifPro_52.bdf") text_area = label.Label(font2, text="Hello", color=0xFFFFFF) text_area.x = 48 text_area.y = 10 text_area2 = label.Label(font2, text="I am", color=0xFFFF00) text_area2.x = 53 text_area2.y = 30 text_area3 = label.Label(font4, text="f", color=0xFF0000) text_area3.x = 45 text_area3.y = 80 text_area4 = label.Label(font4, text="i", color=0xFF0000) text_area4.x = 70 text_area4.y = 80 text_area5= label.Label(font4, text="d", color=0xFF0000) text_area5.x = 85 text_area5.y = 80 j = 0 k = 0 my_color = the_color[j] speedCheck = 10 pad = gamepadshift.GamePadShift(digitalio.DigitalInOut(board.BUTTON_CLOCK), digitalio.DigitalInOut(board.BUTTON_OUT), digitalio.DigitalInOut(board.BUTTON_LATCH)) rect = [0] * 40 slow = [0] * 40 bitmap = displayio.Bitmap(display.width, display.height, 2) palette = displayio.Palette(2) palette[0] = 0x000000 # This is the background of the display palette[1] = 0x8A2BE2 # This is the foreground, Purple # TileGrid for the bitmap bitmap_grid = displayio.TileGrid(bitmap, pixel_shader=palette) rect_back = Rect(0, 0, 160, 128, fill=0x000000) for irange in range(40): rect[irange] = Rect(irange * 4, random.randint(0, 120), 3, 3, fill=0x00FF00) for irange in range(40): slow[irange] = (random.randint(0, 10) * 20) + speedCheck speed = [0] * 40 # Create a Group to hold the TileGrid group = displayio.Group(max_size=50) # Add the TileGrid to the Group group.append(rect_back) group.append(text_area) group.append(text_area2) group.append(text_area3) group.append(text_area4) group.append(text_area5) for irange in range(40): group.append(rect[irange]) # Add the Group to the Display display.show(group) while True: if ledCheck > led_speed: if ledOn == 0: led[i] = (my_color) ledOn = 1 else: led[i] = (0, 0, 0) ledOn = 0 i += ledDirection if i < 1 or i > 3: ledDirection *= -1 ledCheck = 0 ledCheck += 1 if pushed == 1: soundTimer += 1 if soundTimer == 300: audio.stop() pressed = pad.get_pressed() if pressed == 0: pushed = 0 audio.stop() if pushed == 0: pressed = pad.get_pressed() if pressed == 0x01: led_speed += .05 if pressed == 0x02: led_speed -= .05 if led_speed > 500: led_speed = 500 if led_speed < 10: led_speed = 10 if pressed == 0x04: j += 1 if j > len(the_color) - 1: j = 0 my_color = the_color[j] pushed = 1 soundTimer = 0 audio.play(sine_wave_sample, loop=True) if pressed == 0x08: pushed = 1 k += 1 if k > len(fid_color) - 1: k = 0 text_area3.color = fid_color[k] text_area4.color = fid_color[k] text_area5.color = fid_color[k] for irange in range(40): speed[irange] += 1 for irange in range(40): if speed[irange] > slow[irange]: speed[irange] = 0 slow[irange] = (random.randint(0, 10) * 20) + speedCheck rect[irange].y += 4 if rect[irange].y > 126: rect[irange].y = 0 fid_count += 1 if fid_count > 15: fid_count = 0 f_sine_count += 1 if f_sine_count == len(fid_sine): f_sine_count = 0 text_area3.y = 80 + fid_sine[f_sine_count] * 3 i_sine_count += 1 if i_sine_count == len(fid_sine): i_sine_count = 0 text_area4.y = 80 + fid_sine[i_sine_count] * 3 d_sine_count += 1 if d_sine_count == len(fid_sine): d_sine_count = 0 text_area5.y = 80 + fid_sine[d_sine_count] * 3
I have cleaned it up a little more and took out unused includes. I also added some comments inside the code. It went from 592 lines of code down to 209. I can probably crunch it down some more and add some stuff.
Perhaps the ‘green rain’ could be changed to sprites to make them fall faster.
BTW, if you know of a better way for me to list the code, especially long code, please let me know. SyntaxHighlighter can make the code into a clickable line to open, but I would rather have a set size box that is scrollable.
EDIT – I added the files to github
https://github.com/gbushta/Hello-I-am
The repo contains both the old file and the newer crunched file.