import _thread
import time
from dht22_oled import DHT22_OLED
from servo_control import ServoControl  # Asegúrate de que esta clase esté correctamente definida

# Define los pines GPIO
SERVO_PIN = 4
BUTTON_PIN = 34
NEOPIXEL_PIN = 16
NUM_NEOPIXELS = 16
TRIGGER_PIN = 33
ECHO_PIN = 32
POTENTIOMETER_PIN = 35  # Define el pin del potenciómetro

DHT22_PIN = 18       # Pin GPIO al que está conectado el sensor DHT22
I2C_SDA_PIN = 21     # Pin SDA del I2C
I2C_SCL_PIN = 22     # Pin SCL del I2C
OLED_WIDTH = 128     # Ancho de la pantalla OLED
OLED_HEIGHT = 64     # Alto de la pantalla OLED
SERVO_PIN_OLED = 23  # Pin GPIO para el servo controlado por la temperatura

# Configuración para elegir qué clase ejecutar
RUN_SERVO_CONTROL = True  # Cambia a True para ejecutar ServoControl
RUN_DHT22_OLED = True     # Cambia a True para ejecutar DHT22_OLED

# Crear instancia de las clases
sensor_display = DHT22_OLED(DHT22_PIN, I2C_SDA_PIN, I2C_SCL_PIN, OLED_WIDTH, OLED_HEIGHT, SERVO_PIN_OLED)
servo_control = ServoControl(SERVO_PIN, BUTTON_PIN, NEOPIXEL_PIN, NUM_NEOPIXELS, TRIGGER_PIN, ECHO_PIN, POTENTIOMETER_PIN)

def run_dht22():
    if RUN_DHT22_OLED:
        sensor_display.run(interval=1)

def run_servo_control():
    if RUN_SERVO_CONTROL:
        servo_control.run()

# Ejecutar las funciones en hilos separados
if RUN_SERVO_CONTROL:
    _thread.start_new_thread(run_servo_control, ())

if RUN_DHT22_OLED:
    _thread.start_new_thread(run_dht22, ())

# Mantener el programa principal en ejecución
try:
    while True:
        time.sleep(1)  # Mantener el hilo principal activo
except KeyboardInterrupt:
    print("Programa terminado")