#
# hello.array.2350.py
#    RP2350 Charlieplex hello-world
#
# Neil Gershenfeld 11/1/26
#
# This work may be reproduced, modified, distributed,
# performed, and displayed for any purpose, but must
# acknowledge this project. Copyright is retained and
# must be preserved. The work is provided as is; no
# warranty is provided, and users accept all liability.
#

from machine import Pin
import time

loop_time = 5

pin_A = 28
pin_B = 5
pin_C = 6
pin_D = 7
pin_E = 0

A = Pin(pin_A,Pin.IN)
B = Pin(pin_B,Pin.IN)
C = Pin(pin_C,Pin.IN)
D = Pin(pin_D,Pin.IN)
E = Pin(pin_E,Pin.IN)

def loop(delay):
    nloop = loop_time//(20*delay)
    for i in range(nloop):
        #
        A.init(Pin.OUT,value=0)
        B.init(Pin.OUT,value=1)
        time.sleep(delay)
        B.init(Pin.IN,pull=None)
        C.init(Pin.OUT,value=1)
        time.sleep(delay)
        C.init(Pin.IN,pull=None)
        D.init(Pin.OUT,value=1)
        time.sleep(delay)
        D.init(Pin.IN,pull=None)
        E.init(Pin.OUT,value=1)
        time.sleep(delay)
        A.init(Pin.IN,pull=None)
        E.init(Pin.IN,pull=None)
        #
        B.init(Pin.OUT,value=0)
        A.init(Pin.OUT,value=1)
        time.sleep(delay)
        A.init(Pin.IN,pull=None)
        C.init(Pin.OUT,value=1)
        time.sleep(delay)
        C.init(Pin.IN,pull=None)
        D.init(Pin.OUT,value=1)
        time.sleep(delay)
        D.init(Pin.IN,pull=None)
        E.init(Pin.OUT,value=1)
        time.sleep(delay)
        B.init(Pin.IN,pull=None)
        E.init(Pin.IN,pull=None)
        #
        C.init(Pin.OUT,value=0)
        A.init(Pin.OUT,value=1)
        time.sleep(delay)
        A.init(Pin.IN,pull=None)
        B.init(Pin.OUT,value=1)
        time.sleep(delay)
        B.init(Pin.IN,pull=None)
        D.init(Pin.OUT,value=1)
        time.sleep(delay)
        D.init(Pin.IN,pull=None)
        E.init(Pin.OUT,value=1)
        time.sleep(delay)
        C.init(Pin.IN,pull=None)
        E.init(Pin.IN,pull=None)
        #
        D.init(Pin.OUT,value=0)
        A.init(Pin.OUT,value=1)
        time.sleep(delay)
        A.init(Pin.IN,pull=None)
        B.init(Pin.OUT,value=1)
        time.sleep(delay)
        B.init(Pin.IN,pull=None)
        C.init(Pin.OUT,value=1)
        time.sleep(delay)
        C.init(Pin.IN,pull=None)
        E.init(Pin.OUT,value=1)
        time.sleep(delay)
        D.init(Pin.IN,pull=None)
        E.init(Pin.IN,pull=None)
        #
        E.init(Pin.OUT,value=0)
        A.init(Pin.OUT,value=1)
        time.sleep(delay)
        A.init(Pin.IN,pull=None)
        B.init(Pin.OUT,value=1)
        time.sleep(delay)
        B.init(Pin.IN,pull=None)
        C.init(Pin.OUT,value=1)
        time.sleep(delay)
        C.init(Pin.IN,pull=None)
        D.init(Pin.OUT,value=1)
        time.sleep(delay)
        D.init(Pin.IN,pull=None)
        E.init(Pin.IN,pull=None)

while True:
    loop(0.1)
    loop(0.0001)
