# led chaser circuit
from machine import Pin
from utime import sleep
t = 30 / 1000
t1 = 20 / 1000
t2 = 100 / 1000
t3 = 50 / 1000
pins = [Pin(i, Pin.OUT) for i in range(0, 20)]
# --------------------------------------------
def clear():
for pin in pins:
pin.off()
# --------------------------------------------
def effect_1():
for i in range(len(pins)):
if i + 2 < len(pins):
pins[i].on()
sleep(t1)
pins[i + 1].on()
sleep(t1)
pins[i + 2].on()
sleep(t1)
pins[i].off()
sleep(t1)
pins[i + 1].off()
sleep(t1)
for i in range(len(pins)-1, 0, -1):
if i - 2 >= 0:
pins[i].on()
sleep(t1)
pins[i - 1].on()
sleep(t1)
pins[i - 2].on()
sleep(t1)
pins[i].off()
sleep(t1)
pins[i - 1].off()
sleep(t1)
# --------------------------------------------
def effect_2():
count = len(pins)-1
for i in range(len(pins)):
clear()
pins[i].on() # chaser 1
pins[count].on() # chaser 2
count -= 1
if count != 7:
sleep(t2)
for i in range(len(pins)-1, -1, -1):
clear()
pins[i].on() # chaser 1
pins[count].on() # chaser 2
count += 1
if count != 8:
sleep(t2)
# --------------------------------------------
def effect_3():
for pin in pins:
pin.on()
sleep(t3)
for pin in pins:
pin.off()
sleep(t3)
for pin in reversed(pins):
pin.on()
sleep(t3)
for pin in reversed(pins):
pin.off()
sleep(t3)
# --------------------------------------------
def effect_4():
for j in range(len(pins)):
pins[j].on()
sleep(t2)
pins[j].off()
for k in range(len(pins)-1, -1, -1):
pins[k].on()
sleep(t2)
pins[k].off()
# --------------------------------------------
def effect_5():
for pin in range(len(pins)-1, 0, -1):
pins[pin].on()
sleep(t1)
if pin + 1 < len(pins):
pins[pin + 1].off()
sleep(t1)
for pin in range(len(pins)-1, 0, -1):
if pin + 1 < len(pins):
pins[pin + 1].on()
sleep(t1)
if pin + 2 < len(pins):
pins[pin + 2].off()
sleep(t1)
# --------------------------------------------
def effect_6():
for j in range(len(pins)):
pins[j].off()
sleep(t)
pins[j].on()
sleep(t)
if j - 2 >= 0:
pins[j - 2].off()
sleep(t)
pins[j].on()
# --------------------------------------------
def effect_7():
for j in range(len(pins)):
pins[j].on()
sleep(t)
if j + 2 < len(pins):
pins[j + 2].off()
sleep(t)
# --------------------------------------------
while True:
effect_1()
effect_1()
effect_2()
effect_2()
effect_3()
effect_3()
effect_4()
effect_4()
effect_5()
effect_5()
effect_6()
effect_6()
effect_7()
effect_7()