# Importer les librairies qui vont bien
from machine import Pin, PWM
import time
import neopixel
# Configuration de la LED RGB:
led_rgb = neopixel.NeoPixel(Pin(23), 1)
def set_color(r, g, b):
led_rgb[0] = (r, g, b)
led_rgb.write()
# Configuration du moteur
moteur = PWM(Pin(13), freq=50)
# Configuration des touches du clavier
keys = [
['1', '2', '3', 'A'],
['4', '5', '6', 'B'],
['7', '8', '9', 'C'],
['*', '0', '#', 'D']
]
row_pins = [18, 5, 17, 16]
col_pins = [4, 0, 2, 15]
# Initialisation des broches de ligne en sortie
for row_pin in row_pins:
Pin(row_pin, Pin.OUT)
# Initialisation des broches de colonne en entrée avec pull-up
for col_pin in col_pins:
Pin(col_pin, Pin.IN, Pin.PULL_UP)
# Fonction pour lire si une touche est appuyée
def get_key():
for i, row_pin in enumerate(row_pins):
Pin(row_pin, Pin.OUT).value(0)
for j, col_pin in enumerate(col_pins):
if not Pin(col_pin, Pin.IN).value():
time.sleep(0.001)
if not Pin(col_pin, Pin.IN).value():
Pin(row_pin, Pin.OUT).value(1)
return keys[i][j]
Pin(row_pin, Pin.OUT).value(1)
return None
def set_color(r, g, b):
led_rgb[0] = (r, g, b)
led_rgb.write()
def ouvrir():
moteur.duty(77) # 90° pour un servo
def fermer():
moteur.duty(26) # 0° pour un servo
# Définition de variables globales
code = ""
password = "123A"
print("\n\n\nJe suis prêt !")
print("Pour ouvrir la serrure, tapez le code '123A'")
# On commence par un rapide auto-test
set_color(255, 255, 255)
ouvrir()
time.sleep(0.5)
set_color(0, 0, 0)
fermer()
# La boucle principale
while True:
key = get_key()
if key:
# on ajoute la dernière touche frappée au code mémorisé
code += key
print("Code en cours:", code)
if code == password:
print("On ouvre pendant 1s...")
set_color(0, 255, 0)
ouvrir()
time.sleep(1)
print("Et on referme !")
fermer()
set_color(0, 0, 0)
# et on oublie le bon code qui a été tapé
code = ""
elif password.startswith(code):
print("jusqu'ici c'est bon...")
set_color(0, 0, 128)
time.sleep(0.25)
set_color(0, 0, 0)
else:
print("mauvais code :", code)
set_color(255, 0, 0)
time.sleep(0.25)
set_color(0, 0, 0)
code = ""
time.sleep(0.01)