from machine import Pin, I2C
#from sh1106 import SH1106_I2C // en caso de usar la libreria "sh1106". Usar sh1106 o ssd1306. Esta librira se encuentra en la carpeta lib.
from ssd1306 import SSD1306_I2C # // esta libreria se carga desde thonny hacia la RPI pico
from menuoled import MENU_OPTIONS, NAVIGATE_MENU
import time
def start_PV():
print("PV inicio")
PV_menu.draw()
def stop_PV():
print("PV fin")
PV_menu.draw()
def start_IM():
print("IM inicio")
IM_menu.draw()
def stop_IM():
print("IM fin")
IM_menu.draw()
def start_AA1():
print("AA1 inicio")
EN_A.value(1)
IN1.value(1)
IN2.value(0)
time.sleep(2)
EN_A.value(0)
IN1.value(0)
IN2.value(0)
AA1_menu.draw()
def stop_AA1():
print("AA1 fin")
EN_A.value(1)
IN1.value(0)
IN2.value(1)
time.sleep(2)
EN_A.value(0)
IN1.value(0)
IN2.value(0)
AA1_menu.draw()
def start_AA2():
print("AA2 inicio")
EN_B.value(1)
IN3.value(1)
IN4.value(0)
time.sleep(2)
EN_B.value(0)
IN3.value(0)
IN4.value(0)
AA2_menu.draw()
def stop_AA2():
print("AA2 fin")
EN_B.value(1)
IN3.value(0)
IN4.value(1)
time.sleep(2)
EN_B.value(0)
IN3.value(0)
IN4.value(0)
AA2_menu.draw()
class Procesos:
"""
Esta clase representa los procesos automatizados del sistema VARTM
Metodos:
Prueba_vacio(start = False)
Inicia o detiene el proceso de la prueba de vacío
Infusion_molde(start = False)
Inicia o detiene el proceso de la infusión del molde
Actuador_lineal(extender = False, act1 = False, act2 = False)
Extiende o retrae el actuador lineal 1, 2 o ambos
"""
def Prueba_vacio(start = False):
if start == True:
print("Se inicia la prueba de vacío")
else: pass
def Infusion_molde(start = False):
if start == True:
print("Se inicia la infusión del molde")
else: pass
def Actuador_lineal(extender= False, act1 = False, act2 = False):
if extender == True:
if act1 == True:
print("Se extiende el actuador 1")
if act2 == True:
print("Se extiende el actuador 2")
else:
if act1 == True:
print("Se Retrae el actuador 1")
if act1 == True:
print("Se retrae el actuador 2")
def configurar_menus_pantalla(oled):
"""Esta función define los Menus y sus opciones que se despliegan en la pantalla oled
Parámetro:
oled: Pantalla en la que se desplegarán los menus
Retorno:
menu: Objeto para navegar por cada menu configurado
"""
#Inicialización de clases
menu_principal = MENU_OPTIONS(oled)
menu_prueba_vacio = MENU_OPTIONS(oled)
menu_infusion_molde = MENU_OPTIONS(oled)
menu_abrazaderas = MENU_OPTIONS(oled)
menu_list = [menu_principal, menu_prueba_vacio, menu_infusion_molde, menu_abrazaderas]
#Opciones del menu principal
menu_principal.add_option("Prueba vacio", menu_prueba_vacio.draw())
menu_principal.add_option("Infusion Molde", menu_infusion_molde.draw())
menu_principal.add_option("Ajuste Actuadores", menu_abrazaderas.draw())
#Opciones del menu de la prueba de vacio
PV_menu.add_option("<- Volver", menu_principal.draw())
PV_menu.add_option("Iniciar prueba.", Procesos.Prueba_vacio(True))
PV_menu.add_option("Detener prueba.", Procesos.Prueba_vacio(False))
#Opciones del menu de la Infusion del Molde
IM_menu.add_option("<- Volver", menu_principal.draw())
IM_menu.add_option("Iniciar Infusion.", Procesos.Infusion_molde(True))
IM_menu.add_option("Detener Infusion.", Procesos.Infusion_molde(False))
#Opciones del ajuste de abrazaderas
menu_abrazaderas.add_option("<- Volver", menu_principal.draw())
menu_abrazaderas.add_option("Extender A.1.", Procesos.Actuador_lineal(extender = True, act1 = True))
menu_abrazaderas.add_option("Retraer A.1.", Procesos.Actuador_lineal(extender = False, act1 = True))
menu_abrazaderas.add_option("Extender A.2.", Procesos.Actuador_lineal(extender = True, act2 = True))
menu_abrazaderas.add_option("Retraer A.2.", Procesos.Actuador_lineal(extender = False, act2 = True))
menu_principal.draw()
menu = NAVIGATE_MENU(menu_list)
return menu
def asignacion_pines_Rpi_pico():
"""Esta función configura los pines de la Raspberry Pi pico que se utilizarán, además los inicializa en un valor bajo
"""
global button_up, button_up, EN_A, EN_B, IN1, IN2, IN3, IN4
#Configuracion pines de los botones
button_up = Pin(15, Pin.IN, Pin.PULL_DOWN)
button_down = Pin(14, Pin.IN, Pin.PULL_DOWN)
button_select = Pin(13, Pin.IN, Pin.PULL_DOWN)
#Configuracion pines
EN_A = Pin(11, Pin.OUT)
EN_B = Pin(12, Pin.OUT)
IN1 = Pin(21, Pin.OUT)
IN2 = Pin(20, Pin.OUT)
IN3 = Pin(19, Pin.OUT)
IN4 = Pin(18, Pin.OUT)
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=400000)
#Inicialización de pines
EN_A.value(0)
EN_B.value(0)
IN1.value(0)
IN2.value(0)
IN3.value(0)
IN4.value(0)
#Se crea el objeto pantalla oled
oled = SSD1306_I2C(128, 64, i2c)
#Se llama la función que configura la RPi
asignacion_pines_Rpi_pico()
#Se llama a la función que configura los menus e inicializa la pantalla oled
menu = configurar_menus_pantalla(oled)
while True:
if button_up.value():
print("Arriba")
menu.navigate("up")
time.sleep(0.3)
if button_down.value():
print("Abajo")
menu.navigate("down")
time.sleep(0.3)
if button_select.value():
print("seleccionar")
menu.select()
time.sleep(0.3)
Loading
ssd1306
ssd1306