from machine import Pin, SPI
import time
# 🟢 Konfiguracja SPI
spi = SPI(0, baudrate=1000000, polarity=0, phase=0)
SER = Pin(13, Pin.OUT) # DS dla 74HC595 (Kolumny)
RCK = Pin(14, Pin.OUT) # STCP dla 74HC595
SCK = Pin(15, Pin.OUT) # SHCP dla 74HC595
PL = Pin(10, Pin.OUT) # P/S dla 74HC165 (Wiersze)
MISO = Pin(7, Pin.IN) # Q7 dla 74HC165 (SPI wejście)
# 🟢 Definicja matrycy klawiatury (4x4)
key_map = [
["1", "2", "3", "A"],
["4", "5", "6", "B"],
["7", "8", "9", "C"],
["*", "0", "#", "D"]
]
# 🟢 Funkcja aktywująca kolumny matrycy przez 74HC595
def select_column(col):
"""Wybiera aktywną kolumnę przez 74HC595."""
data = 1 << col
RCK.value(0)
spi.write(bytearray([data])) # Wysyłamy 8-bitową wartość do 74HC595
RCK.value(1)
# 🟢 Funkcja odczytu wierszy przez 74HC165
def read_rows():
"""Odczytuje stan wierszy matrycy przez 74HC165."""
PL.value(0) # Załaduj dane
time.sleep_us(5)
PL.value(1)
row_data = spi.read(1)[0] # Odczytaj jeden bajt przez SPI
return row_data
# 🟢 Funkcja skanująca matrycę klawiatury
def scan_matrix():
"""Skanuje matrycę klawiatury i wyświetla wciśnięte klawisze."""
pressed_keys = []
for col in range(4): # 4 kolumny
select_column(col)
time.sleep_us(5)
rows = read_rows()
for row in range(4): # 4 wiersze
if rows & (1 << row): # Sprawdzamy, czy przycisk jest wciśnięty
pressed_keys.append(key_map[row][col])
if pressed_keys:
print("🟢 Wciśnięte klawisze:", " ".join(pressed_keys))
# 🟢 Główna pętla programu
print("🔵 Pico gotowe! Wciśnij klawisz na matrycy.")
while True:
scan_matrix()
time.sleep(0.1) # Odświeżanie skanowania co 100ms