#Ejercicio Parcial Tecnicas Digitales 2 - Godoy, Ignacio Ariel.
#Librerias.
from machine import Pin, ADC, PWM
from time import sleep
from utime import ticks_ms
#Pines.
servo_1 = PWM(Pin(0), freq=50) #Pin PWM p/ control de servo.
servo_2 = PWM(Pin(1), freq = 50) #Pin PWM p/ control de servo.
servo_3 = PWM(Pin(2), freq = 50) #Pin PWM p/ control de servo.
conversor = ADC (0) #Pin ADC p/ control de balanza.
#Variables.
cantidad_azul = 0 #Variable p/ cargar la cantidad de color azul.
cantidad_rojo = 0 #Variable p/ cargar la cantidad de color rojo.
cantidad_amarillo = 0 #Variable p/ cargar la cantidad de color amarillo.
cantidad_mezcla = 0 #Variable p/ cargar la cantidad de mezcla.
valor_balanza = 0 #Valor p/control de balanza.
aux = 0
#Funciones.
def tomar_usuario(): #Funcion que se encarga de tomar los datos de color y peso.
global cantidad_amarillo, cantidad_azul, cantidad_rojo, cantidad_mezcla
while True:
cantidad_azul = int(input("Cantidad de tinte azul = "))
if cantidad_azul < 0 or cantidad_azul > 10:
print("El valor debe ser estar entre 0 y 10.")
else:
break
while True:
cantidad_rojo = int(input("Cantidad de tinte rojo = "))
if cantidad_rojo < 0 or cantidad_rojo > 10:
print("El valor debe ser estar entre 0 y 10.")
else:
break
while True:
cantidad_amarillo = int(input("Cantidad de tinte amarillo = "))
if cantidad_amarillo < 0 or cantidad_amarillo > 10:
print("El valor debe ser estar entre 0 y 10.")
else:
break
while True:
cantidad_mezcla = int(input("Cantidad de mezcla = "))
if cantidad_mezcla < 0.1 or cantidad_mezcla > 5:
print("El valor debe ser estar entre 0,1 kg y 5 kg.")
else:
break
print("Carga con exito")
def control_llaves(c_azul, c_rojo, c_amarillo):
c_azul = (c_azul * 100) / 10 #Conversion del valor del color azul.
c_rojo = (c_rojo * 100) / 10 #Conversion del valor del color rojo.
c_amarillo = (c_amarillo * 100) / 10 #Conversion del valor del color amarillo.
#Apertura de los servo.
servo_1.duty_u16(int(((c_azul * 6064) / 100)+1800))
servo_2.duty_u16(int(((c_rojo * 6064) / 100)+1800))
servo_3.duty_u16(int(((c_amarillo * 6064) / 100)+1800))
def balanza (c_mezcla):
global valor_balanza
global aux
c_mezcla = float((c_mezcla * 2.5) / 5)
valor_balanza = float(conversor.read_u16()*2.5/65535)
if c_mezcla <= valor_balanza:
aux = 1
#Interrupciones.
#Main
while True:
tomar_usuario() #Funcion que se encarga de tomar los datos de color y peso.
control_llaves(cantidad_azul,cantidad_rojo,cantidad_amarillo) #Funcion que mueve los servo en funcion de los datos del usuario.
while True:
balanza(cantidad_mezcla) #Funcion para controlar el peso de la balanza.
if aux == 1:
servo_1.duty_u16(1800)
servo_2.duty_u16(1800)
servo_3.duty_u16(1800)
print("LLaves cerradas")
break
sleep(0.1)
sleep(0.1)