from machine import Pin
import time
import sys
import select
from machine import Pin
from time import sleep
import tm1637
tm = tm1637.TM1637(clk=Pin(4), dio=Pin(5))
# 74HC595 connections to Pico GPIO pins
DS = Pin(16, Pin.OUT) # Serial data (DS pin on 74HC595)
SHCP = Pin(17, Pin.OUT) # Serial clock (SHCP pin)
STCP = Pin(18, Pin.OUT) # Storage/latch clock (STCP pin)
def shift_out(data):
"""
Shift out 8 bits of data to the 74HC595
data: 8-bit integer (0-255)
"""
for i in range(8):
# Extract bit (MSB first)
bit = (data >> (7 - i)) & 1
# Set data line
DS.value(bit)
# Pulse shift clock
SHCP.value(1)
time.sleep_us(1) # Small delay for stability
SHCP.value(0)
# Latch data to output
STCP.value(1)
time.sleep_us(1)
STCP.value(0)
def all_off():
"""Turn all LEDs off"""
shift_out(0b00000000)
def all_on():
"""Turn all LEDs on"""
shift_out(0b11111111)
def running_light():
"""Single LED moving from left to right"""
patterns = [
0b10000000, # LED 0
0b01000000, # LED 1
0b00100000, # LED 2
0b00010000, # LED 3
0b00001000, # LED 4
0b00000100, # LED 5
0b00000010, # LED 6
0b00000001 # LED 7
]
for pattern in patterns:
shift_out(pattern)
time.sleep(0.2)
def fill_up():
"""LEDs light up one by one from left to right"""
patterns = [
0b10000000, # 1 LED
0b11000000, # 2 LEDs
0b11100000, # 3 LEDs
0b11110000, # 4 LEDs
0b11111000, # 5 LEDs
0b11111100, # 6 LEDs
0b11111110, # 7 LEDs
0b11111111 # 8 LEDs
]
for pattern in patterns:
shift_out(pattern)
time.sleep(0.3)
def blink_pattern():
"""Blink all LEDs on and off"""
for _ in range(5):
all_on()
time.sleep(0.5)
all_off()
time.sleep(0.5)
def alternating_pattern():
"""Alternating LED pattern"""
pattern1 = 0b10101010 # Odd LEDs
pattern2 = 0b01010101 # Even LEDs
for _ in range(6):
shift_out(pattern1)
time.sleep(0.4)
shift_out(pattern2)
time.sleep(0.4)
def binary_counter():
"""Count from 0 to 255 in binary"""
for i in range(256):
shift_out(i)
time.sleep(0.1)
def knight_rider():
"""Knight Rider style back and forth movement"""
# Forward
patterns_forward = [
0b10000000, 0b01000000, 0b00100000, 0b00010000,
0b00001000, 0b00000100, 0b00000010, 0b00000001
]
# Backward
patterns_backward = [
0b00000010, 0b00000100, 0b00001000, 0b00010000,
0b00100000, 0b01000000, 0b10000000
]
for pattern in patterns_forward:
shift_out(pattern)
time.sleep(0.15)
for pattern in patterns_backward:
shift_out(pattern)
time.sleep(0.15)
# Initialize - turn all LEDs off
all_off()
# Main demo loop
print("74HC595 LED Demo Starting...")
print("Press Ctrl+C to stop")
try:
while True:
print("Running light...")
for _ in range(3):
running_light()
print("Fill up pattern...")
fill_up()
time.sleep(0.5)
all_off()
time.sleep(0.5)
print("Blink pattern...")
blink_pattern()
print("Alternating pattern...")
alternating_pattern()
all_off()
time.sleep(0.5)
print("Knight Rider pattern...")
for _ in range(4):
knight_rider()
all_off()
time.sleep(0.5)
print("Binary counter (0-31)...")
for i in range(32): # Just show 0-31 for brevity
shift_out(i)
time.sleep(0.2)
all_off()
time.sleep(1)
except KeyboardInterrupt:
print("\nDemo stopped")
all_off() # Turn off all LEDs before exiting