# Reference: https://wokwi.com/projects/392212703822168065
# Reference: https://wokwi.com/projects/392220419950952449
from machine import Pin
import time
import neopixel
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(size)
pixels.write() # 更新 LED 顯示
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()