from machine import Pin
import utime
# Define shift register pins
DATA_PIN = Pin(5, Pin.OUT) # Serial Data
CLOCK_PIN = Pin(6, Pin.OUT) # Shift Clock
LATCH_PIN = Pin(7, Pin.OUT) # Storage Latch
def shift_out(value):
"""Shift out 8-bit binary data to 74HC595"""
for i in range(8):
bit = (value >> (7 - i)) & 1 # Extract MSB first
DATA_PIN.value(bit) # Send bit
CLOCK_PIN.value(1) # Clock HIGH
utime.sleep_us(1) # Small delay
CLOCK_PIN.value(0) # Clock LOW
# Latch the data
LATCH_PIN.value(1)
utime.sleep_us(1)
LATCH_PIN.value(0)
def left_shift():
"""Shift LED from left to right"""
value = 0b00000001
for _ in range(8):
shift_out(value)
value <<= 1 # Left shift
utime.sleep(0.45)
def right_shift():
"""Shift LED from right to left"""
value = 0b10000000
for _ in range(8):
shift_out(value)
value >>= 1 # Right shift
utime.sleep(0.45)
def Pingpong():
value = 0b10000000
for _ in range(8):
shift_out(value)
value >>= 1 # Right shift
utime.sleep(0.45)
value = 0b00000001
for _ in range(8):
shift_out(value)
value <<= 1 # Left shift
utime.sleep(0.45)
def alternative_shift():
"""Blink alternate LEDs"""
patterns = [0b10101010, 0b01010101] # Alternating LEDs
for _ in range(10): # Run 10 times
for pattern in patterns:
shift_out(pattern)
utime.sleep(0.45)
while True:
left_shift() # Move LED left
right_shift() # Move LED right
Pingpong() # Blink alternate LEDs
utime.sleep(1) # Pause before repeating