from machine import Pin
from utime import sleep, ticks_ms, ticks_diff
# --- Nastavení vestavěné LED ---
led = Pin(16, Pin.OUT)
led.off()
# --- Nastavení klávesnice ---
# Mapa kláves (řádky a sloupce)
matice_klaves = [
['1', '2', '3', 'A'],
['4', '5', '6', 'B'],
['7', '8', '9', 'C'],
['*', '0', '#', 'D']
]
# Čísla GPIO pro řádky a sloupce (upravit dle zapojení)
klavesnicove_radky = [13, 12, 11, 10]
klavesnicove_sloupce = [9, 8, 7, 6]
# Inicializace pinů
radkove_piny = [] # řádkové piny (budou výstupní)
sloupcove_piny = [] # sloupcové piny (budou vstupní s pull-down)
for i in range(4):
radkove_piny.append(Pin(klavesnicove_radky[i], Pin.OUT))
radkove_piny[i].value(0) # výchozí stav LOW
sloupcove_piny.append(Pin(klavesnicove_sloupce[i], Pin.IN, Pin.PULL_DOWN))
def nacti_klavesu():
"""
Prohledá všechny řádky a sloupce a vrátí stisknutou klávesu.
Pokud není stisknuta žádná klávesa, vrátí None.
"""
for radek in range(4):
# Nastavíme všechny řádky na LOW
for r in range(4):
radkove_piny[r].value(0)
# Nastavíme aktuální řádek na HIGH
radkove_piny[radek].value(1)
for sloupec in range(4):
if sloupcove_piny[sloupec].value() == 1:
# Malá prodleva pro debounce
sleep(0.05)
if sloupcove_piny[sloupec].value() == 1:
klavesa = matice_klaves[radek][sloupec]
# Počkáme, dokud nebude klávesa uvolněna
while sloupcove_piny[sloupec].value() == 1:
sleep(0.01)
return klavesa
return None
def blikani_led(trvani_ms, interval):
"""
Bliká LED po dobu trvani_ms milisekund s daným intervalem (v sekundách).
"""
start = ticks_ms()
while ticks_diff(ticks_ms(), start) < trvani_ms:
led.on()
sleep(interval)
led.off()
sleep(interval)
# --- Parametry hesla ---
spravne_heslo = "1234" # Nastavte požadované heslo
zadane_heslo = "" # Zde se bude ukládat zadané heslo
print("Zadejte heslo pomocí klávesnice. Pro potvrzení stiskněte '#'.")
# --- Hlavní smyčka ---
while True:
stisknuta_klavesa = nacti_klavesu()
if stisknuta_klavesa is not None:
# Pokud je stisknuta klávesa '#' – heslo se potvrdí
if stisknuta_klavesa == '#':
print("Zadané heslo:", zadane_heslo)
if zadane_heslo == spravne_heslo:
print("Heslo je správné! LED zůstane svítit.")
led.on()
break # Ukončíme hlavní smyčku
else:
print("Špatné heslo! LED bude blikat 3 sekundy.")
blikani_led(3000, 0.2)
zadane_heslo = "" # Vymažeme zadané heslo
print("Zkuste to znovu. Zadejte heslo:")
elif stisknuta_klavesa == '*':
# Klávesa '*' slouží jako smazání zadaného hesla
zadane_heslo = ""
print("Heslo vymazáno. Zadejte heslo:")
else:
# Při stisknutí jiné klávesy přidáme znak do zadaného hesla
zadane_heslo += stisknuta_klavesa
# Pro přehled na konzoli vypíšeme hvězdičky místo skutečných znaků
print("Zadané heslo:", "*" * len(zadane_heslo))
sleep(0.1)