from machine import Pin, PWM
import machine
import time
from utime import sleep
boton0 = Pin(0, Pin.IN, Pin.PULL_UP)
boton1 = Pin(1, Pin.IN, Pin.PULL_UP)
boton2 = Pin(3, Pin.IN, Pin.PULL_UP)
servo_pin = machine.PWM(machine.Pin(2))
servo_pin.freq(50)
def servo(degrees):
# Checkear si el ángulo buscado está dentro del rango de trabajo
if degrees > 180:
degrees = 180
if degrees < 0:
degrees = 0
# Valores min y max del duty cycle
maxDuty = 9000
minDuty = 1000
# Fórmula para pasar de grados a PWM/duty cycle
# Duty Cycle = minimo + rango * proporción de ángulo
newDuty = minDuty + (maxDuty - minDuty) * (degrees / 180)
# Pasar el valor de duty al servo
servo_pin.duty_u16(int(newDuty))
#función para hacer girar al servomotor, y dejar la valvula abierta por cierto tiempo según el tamaño de porción
def girar_servo(tiempo_espera):
# Girar 180 grados
for degree in range(0, 91, 1):
servo(degree)
sleep(0.01)
# Esperar el tiempo especificado
sleep(tiempo_espera)
# Regresar a posición inicial
for degree in range(90, -1, -1):
servo(degree)
sleep(0.01)
#estados del boton sin presionar
ultimo_estado_boton0 = boton0.value()
ultimo_estado_boton1 = boton1.value()
ultimo_estado_boton2 = boton2.value()
print(str(boton0.value()))
print(str(boton1.value()))
print(str(boton2.value()))
while True:
#estado del boton presionado, o después de presionar
estado_actual_boton0 = boton0.value()
estado_actual_boton1 = boton1.value()
estado_actual_boton2 = boton2.value()
#porción chica
if estado_actual_boton0 != ultimo_estado_boton0:
if estado_actual_boton0 == 0: # Botón presionado
girar_servo(1) # 1 segundo de espera
#porción mediana
if estado_actual_boton1 != ultimo_estado_boton1:
if estado_actual_boton1 == 0: # Botón presionado
girar_servo(2) # 2 segundos de espera
#porción grande
if estado_actual_boton2 != ultimo_estado_boton2:
if estado_actual_boton2 == 0: # Botón presionado
girar_servo(3) # 3 segundos de espera
ultimo_estado_boton0 = estado_actual_boton0
ultimo_estado_boton1 = estado_actual_boton1
ultimo_estado_boton2 = estado_actual_boton2
sleep(0.1) # Pequeño retardo para evitar consumo excesivo
Loading
esp32-c3-devkitm-1
esp32-c3-devkitm-1
porción pequeña
porción mediana
porción grande