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)

BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT
Loading
ssd1306