To use with CircuitPython, you need to first install a few libraries, into the lib folder on your CIRCUITPY drive. Then you need to update code.py with the example script.
Thankfully, we can do this in one go. In the example below, click the Download Project Bundle button below to download the necessary libraries and the code.py file in a zip file. Extract the contents of the zip file, open the directory Circuit_Playground_Sailor_Moon_Star_Locket/ and then click on the directory that matches the version of CircuitPython you're using and copy the contents of that directory to your CIRCUITPY drive.
Your CIRCUITPY drive should now look similar to the following image:

# SPDX-FileCopyrightText: 2021 Liz Clark for Adafruit Industries # # SPDX-License-Identifier: MIT import time import displayio from adafruit_circuitplayground import cp import adafruit_imageload from adafruit_gizmo import tft_gizmo from adafruit_display_shapes.circle import Circle # setup for the Gizmo TFT display = tft_gizmo.TFT_Gizmo() # loading the background image bg_bitmap, bg_palette = adafruit_imageload.load( "/clouds_bg.bmp", bitmap=displayio.Bitmap, palette=displayio.Palette ) bg_grid = displayio.TileGrid(bg_bitmap, pixel_shader=bg_palette) # loading the crescent moon bitmap sequence bitmap, palette = adafruit_imageload.load( "/moon_anime.bmp", bitmap=displayio.Bitmap, palette=displayio.Palette ) # makes the black background transparent so we only see the cresent moon palette.make_transparent(0) tile_grid = displayio.TileGrid( bitmap, pixel_shader=palette, width=1, height=1, tile_height=120, tile_width=120, default_tile=0, ) # two circles for the center "jewel" jewel_outline = Circle(x0=120, y0=120, r=40, fill=0xFBF236) jewel = Circle(x0=120, y0=120, r=35, fill=0xF70570) # adding the two jewel circle elements to a group jewel_splash = displayio.Group() jewel_splash.append(jewel_outline) jewel_splash.append(jewel) # making a group for the crescent moon sequence # scale is 2 because at full 240x240 resolution image is too big moon_group = displayio.Group(scale=2) # group to hold all of the display elements main_group = displayio.Group() # adding the crescent moon tile grid to the moon group moon_group.append(tile_grid) # adding the background to the main group main_group.append(bg_grid) # adding the moon group to the main group main_group.append(moon_group) # adding the jewel circles to the main group main_group.append(jewel_splash) # showing the main group on the display display.root_group = main_group # tracks the tilegrid index location for the crescent moon moon = 0 # holds time.monotonic() crescent = 0 # a button debouncing a_pressed = False # b button debouncing b_pressed = False # tracks if music is playing music_playing = False # tracks if animation is paused animation_pause = False while True: # button debouncing if not cp.button_a and a_pressed: a_pressed = False if not cp.button_b and b_pressed: b_pressed = False # runs crescent moon animation if not music_playing and not animation_pause: # every .8 seconds... if (crescent + 0.8) < time.monotonic(): # the moon animation cycles tile_grid[0] = moon # moon is the tilegrid index location moon += 1 # resets timer crescent = time.monotonic() # resets tilegrid index if moon > 35: moon = 0 # if music is NOT playing and you press the a button... if not music_playing and (cp.button_a and not a_pressed): # music begins playing and will loop music_playing = True a_pressed = True print("music playing") # song plays once cp.play_file("moonlight_densetsu.wav") # music_playing state is updated music_playing = False # if the animation IS playing and you press the b button... if not animation_pause and (cp.button_b and not b_pressed): # the animation pauses by updating the animation_pause state animation_pause = True b_pressed = True # debugging REPL message print("animation paused") # if the animation is PAUSED and you press the b button... if animation_pause and (cp.button_b and not b_pressed): # the animation begins again by updating the animation_pause state animation_pause = False b_pressed = True # debugging REPL message print("animation running again")
Page last edited January 21, 2025
Text editor powered by tinymce.