from machine import Pin, PWM, time_pulse_us
import time
servo_pin = PWM(Pin(26))
servo_pin.freq(50)
trig_pin = Pin(27, Pin.OUT)
echo_pin = Pin(35, Pin.IN)
leda = Pin(12, Pin.OUT)
ledc = Pin(25, Pin.OUT)
teclas = [["1", "2", "3", "A"],
["4", "5", "6", "B"],
["7", "8", "9", "C"],
["*", "0", "#", "D"]]
filas = [15, 16, 17, 18]
columnas = [19, 21, 22, 23]
pines_filas = [Pin(pin, mode=Pin.OUT) for pin in filas]
pines_columnas = [Pin(pin, mode=Pin.IN, pull=Pin.PULL_UP) for pin in columnas]
contraseña_establecida = "1013D"
contraseña_ingresada = ""
def set_angle(angle):
duty = int(1638 + (angle / 180) * (8192 - 1638))
servo_pin.duty_u16(duty)
def medir_distancia():
trig_pin.value(0)
time.sleep_us(2)
trig_pin.value(1)
time.sleep_us(10)
trig_pin.value(0)
duration_us = time_pulse_us(echo_pin, 1)
if duration_us == -1:
return None
distance_cm = duration_us / 58.0
return distance_cm
def escanear():
for fila in range(4):
pines_filas[fila].value(0)
for columna in range(4):
if pines_columnas[columna].value() == 0:
while pines_columnas[columna].value() == 0:
pass
pines_filas[fila].value(1)
return teclas[fila][columna]
pines_filas[fila].value(1)
return None
def a_pluma():
leda.value(1)
ledc.value(0)
set_angle(0)
def c_pluma():
leda.value(0)
ledc.value(1)
set_angle(90)
c_pluma()
print("Ingresa la contraseña para abrir la pluma.")
while True:
tecla = escanear()
if tecla:
contraseña_ingresada += tecla
print("Tecla presionada:", tecla)
if len(contraseña_ingresada) == 5:
print("Contraseña ingresada:", contraseña_ingresada)
if contraseña_ingresada == contraseña_establecida:
print("Contraseña correcta, la pluma está abierta.")
a_pluma()
while True:
distancia = medir_distancia()
if distancia is not None:
print(f"Distancia medida: {distancia:.2f} cm")
if distancia > 200:
print("El carro ha avanzado más de 200 cm, pluma cerrada.")
c_pluma()
break
time.sleep(0.1)
else:
print("Contraseña incorrecta. Intente de nuevo.")
contraseña_ingresada = ""
time.sleep(0.1)