import framebuf
import time
from machine import Pin, I2C, ADC, PWM
import sh1106
from menuoled import MENU, MENU_OPTIONS, NAVIGATE_MENU
from menuu import dibujar_menu_principal
from Abrazaderas import Extender_Abrazadera_1, Extender_Abrazadera_2, Retraer_Abrazadera_1, Retraer_Abrazadera_2
from Funciones_Principales import Comenzar_PV, Comenzar_IM
#Inicialización del I2C
i2c = I2C(0, scl=Pin(17),sda=Pin(16))
#Inicialización de la pantalla OLED
oled = sh1106.SH1106_I2C(128, 64, i2c, rotate=180)
# Creación de los menús
menu_principal = MENU_OPTIONS(oled, y_init=16, width_menu=128,partial_update=True)
menu_extras = MENU(oled)
Prueba_Vacio_menu = MENU_OPTIONS(oled)
Infusion_Molde_menu = MENU_OPTIONS(oled)
Abrazadera_1_menu = MENU_OPTIONS(oled)
Abrazadera_2_menu = MENU_OPTIONS(oled)
# Configuración de pines para control del puente H L298N
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)
# Configuración de pines para el control de los Relés.
RELE_VALVULA = Pin(2, Pin.OUT)
RELE_BOMBA =Pin(3, Pin.OUT)
#Configuración de pin para el sensor analógico.
pot = ADC(27)
# Inicialización de los pines en estado apagado.
EN_A.value(0)
EN_B.value(0)
IN1.value(0)
IN2.value(0)
IN3.value(0)
IN4.value(0)
RELE_VALVULA.value(1)
RELE_BOMBA.value(1)
# Configuracion de tiempo.
tiempo_de_infusion = 1500
tiempo_prueba_de_vacio = 10
tiempo_de_movimiento = 2.5
tiempo_curado = 86400
# Configuración de 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)
# Configuración de las opciones en el menú principal
menu_principal.add_option("Prueba vacio", lambda: Prueba_Vacio_menu.draw())
menu_principal.add_option("Infusion Molde", lambda: Infusion_Molde_menu.draw())
menu_principal.add_option("Ajuste A. 1", lambda: Abrazadera_1_menu.draw())
menu_principal.add_option("Ajuste A. 2", lambda: Abrazadera_2_menu.draw())
# Configuración de las opciones en los menús secundarios
Prueba_Vacio_menu.add_option("<- Volver", lambda: dibujar_menu_principal(menu_principal, oled, menu_extras))
Prueba_Vacio_menu.add_option("INICIAR PRUEBA", lambda: Comenzar_PV(EN_A, EN_B, IN1, IN2, IN3, IN4, pot ,RELE_BOMBA, RELE_VALVULA, Prueba_Vacio_menu, oled, button_select, tiempo_prueba_de_vacio, tiempo_de_movimiento))
Infusion_Molde_menu.add_option("<- Volver", lambda: dibujar_menu_principal(menu_principal, oled, menu_extras))
Infusion_Molde_menu.add_option("Iniciar Infusion.", lambda: Comenzar_IM(EN_A, EN_B, IN1, IN2, IN3, IN4,RELE_BOMBA, RELE_VALVULA, Infusion_Molde_menu,oled,button_select,tiempo_de_infusion, tiempo_de_movimiento))
Infusion_Molde_menu.add_option("Iniciar Curado.", lambda : Curado(EN_A, EN_B, IN1, IN2, IN3, IN4, oled, tiempo_curado, tiempo_de_movimiento, Infusion_Molde_menu, button_select))
Abrazadera_1_menu.add_option("<- Volver", lambda: dibujar_menu_principal(menu_principal, oled, menu_extras))
Abrazadera_1_menu.add_option("Extender A.1.", lambda: Extender_Abrazadera_1(EN_A, IN1, IN2, Abrazadera_1_menu, oled, tiempo_de_movimiento))
Abrazadera_1_menu.add_option("Retraer A.1.", lambda: Retraer_Abrazadera_1(EN_A, IN1, IN2, Abrazadera_1_menu, oled, tiempo_de_movimiento))
Abrazadera_2_menu.add_option("<- Volver", lambda: dibujar_menu_principal(menu_principal, oled, menu_extras))
Abrazadera_2_menu.add_option("Extender A.2.", lambda: Extender_Abrazadera_2(EN_B, IN3, IN4, Abrazadera_2_menu, oled, tiempo_de_movimiento))
Abrazadera_2_menu.add_option("Retraer A.2.", lambda: Retraer_Abrazadera_2(EN_B, IN3, IN4, Abrazadera_2_menu, oled, tiempo_de_movimiento))
# Lista de menús para la navegación
menu_list = [menu_principal, Prueba_Vacio_menu, Infusion_Molde_menu, Abrazadera_1_menu, Abrazadera_2_menu]
menu = NAVIGATE_MENU(menu_list)
# Mostrar el menú principal al inicio
dibujar_menu_principal(menu_principal, oled, menu_extras)
# Bucle principal para gestionar la navegación del menú a través de los botones.
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)