# Reference: https://wokwi.com/projects/392212703822168065
from machine import Pin
import neopixel
import machine
import time
ws_pin = 13
NUMPIXELS = 256
# Initialize NeoPixel strip
pixels = neopixel.NeoPixel(Pin(ws_pin), NUMPIXELS)
def display_reducing_square():
# for size in range(16, 1, -8):
rainbow_square(16)
pixels.write()
time.sleep(1)
def rainbow_square(size):
for i in range(size):
color = wheel((i * 256 // size) & 255)
# Fill top row
for col in range(i, size):
pixels[i * 16 + col] = color
# Fill bottom row
for col in range(i, size):
pixels[(size - 1) * 16 + col] = color
# Fill left column
for row in range(i + 1, size - 1):
pixels[row * 16 + i] = color
# Fill right column
for row in range(i + 1, size - 1):
pixels[row * 16 + size - 1] = color
def wheel(wheel_pos):
wheel_pos = 255 - wheel_pos
if wheel_pos < 85:
return (255 - wheel_pos * 3, 0, wheel_pos * 3)
if wheel_pos < 170:
wheel_pos -= 85
return (0, wheel_pos * 3, 255 - wheel_pos * 3)
wheel_pos -= 170
return (wheel_pos * 3, 255 - wheel_pos * 3, 0)
while True:
display_reducing_square()