'''
--------------------------------------------------------------------------
Equipo 8 

Cervantes García Ximena
Cortes Mata Jose Yahir
Gonzalez Vazquez Jorge Carlos

'''
#Importando Librerias 
import machine
from machine import Pin, I2C, Timer, PWM
import time
import dht                  #Libreria sensor de humedad
from hcsr04 import HCSR04   #Libreria del Ultrasonico
import max7219
from machine import Pin, SPI

#---------------------------------------------------------------
#Definiendo el UART
uart = machine.UART(2.115200)

#----------------------------------------------------------------
#Definiendo los objetos Tipo sensor Y sus pines  ----------------
pin_trig_1 = 13 #Pin de trigger compartido_1 (2 sensores)
pin_trig_2 = 25 #Pin de trigger compartido_2 (2 sensores)

#---------------------------------------------------------------
sensor1 = HCSR04(pin_trig_1,12,echo_timeout_us=1000000)  
sensor2 = HCSR04(pin_trig_1,27,echo_timeout_us=1000000)
sensor3 = HCSR04(pin_trig_1,26,echo_timeout_us=1000000)
sensor4 = HCSR04(pin_trig_1,14,echo_timeout_us=1000000)
#----------------------------------------------------------------
sensor5 = HCSR04(pin_trig_2,33,echo_timeout_us=1000000)
sensor6 = HCSR04(pin_trig_2,32,echo_timeout_us=1000000)
sensor7 = HCSR04(pin_trig_2,35,echo_timeout_us=1000000)
#----------------------------------------------------------------
#Definiendo el sensor de Humedad y el sensor Pir  ---------------
dht22 = dht.DHT22(Pin(34)) 
Sensor_pir = machine.Pin(35,Pin.IN)

#----------------------------------------------------------------
# Configuración del servo motor --------------------------------

servo_pin_1 = 2  #Pin PWM donde se conecta el servo 1
servo_pin_2 = 4  #Pin PWM donde se conecta el servo 2

servo_1 = PWM(Pin(servo_pin_1), freq=50)
servo_1.duty(77)  #Valor inicial del servo motor

servo_2 = PWM(Pin(servo_pin_2), freq=50)
servo_2.duty(77)  #Valor inicial del servo motor

#------------------------------------------------------------------
# Configuración de los botones  -----------------------------------
botonpin_1 = 18   #Pin del Boton 1
botonpin_2 = 19    #Pin del boton 2

boton_1 = Pin(botonpin_1, Pin.IN, Pin.PULL_UP)
boton_2 = Pin(botonpin_2, Pin.IN, Pin.PULL_UP)
#------------------------------------------------------------------
#Configuracion de los pines de los Leds (Rojo/verde)
led_1 = Pin(5, Pin.OUT, Pin.PULL_DOWN)
led_2 = Pin(21, Pin.OUT, Pin.PULL_DOWN)
led_3 = Pin(15, Pin.OUT, Pin.PULL_DOWN)
led_4 = Pin(3, Pin.OUT, Pin.PULL_DOWN)
led_5 = Pin(1, Pin.OUT, Pin.PULL_DOWN)
led_6 = Pin(22, Pin.OUT, Pin.PULL_DOWN)
led_7 = Pin(23, Pin.OUT, Pin.PULL_DOWN)


#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Funciones del Sistema  ------------------------------------------
#Leyendo los sensores 
def read_sensors():
    # Lee los valores de los sensores
    dht22.measure()

    temperatura_sensor = dht22.temperature()
    humedad_sensor = dht22.humidity()

    # Crea una cadena de texto con los valores de los sensores
    sensor_data = f"Temperatura: {temperatura_sensor}, Humedad: {humedad_sensor}, "

    return sensor_data

#------------------------------------------------------------------
# Mandando las lecturas al serial
def send_sensor_data(timer):
    # Lee los valores de los sensores
    data = read_sensors()

    # Envia los datos por el puerto serial
    uart.write(data + '\n')

# Movieminto de los servomotores ----------------------------------
def mover_sero_1():
    servo_1.duty(115)
    time.sleep(2)
    servo_1.duty(77)

def mover_sero_2():
    servo_2.duty(115)
    time.sleep(2)
    servo_2.duty(77)
#-------------------------------------------------------------------
#Sensor Pir --------------------------------------------------------
def sensor_pir_medicion():
    lectura=Sensor_pir.value()
    if lectura==1: 
        print('Detectado')
    else:
        print('Sin detectar')
#-------------------------------------------------------------------
#Sensor de Huemdad -------------------------------------------------
def sensor_humedad():
    dht22.measure()
    print(str(dht22.temperature()))
    print(str(dht22.humidity()))
#--------------------------------------------------------------------
# Medir todas las distancias ------------------
def medir_sensores_ultrasonido(timer):

    lectura_1 = sensor1.distance_cm()
    lectura_2 = sensor2.distance_cm()
    lectura_3 = sensor3.distance_cm()
    lectura_4 = sensor4.distance_cm()
    lectura_5 = sensor4.distance_cm()
    lectura_6 = sensor4.distance_cm()
    lectura_7 = sensor4.distance_cm()

    if lectura_1 < 6: led_1.on()
    if lectura_1 > 6: led_1.off()

    if lectura_2 < 6: led_2.on()
    if lectura_2 > 6: led_2.off()

    if lectura_3 < 6: led_3.on()
    if lectura_3 > 6:led_3.off()
    
    if lectura_4 < 6: led_4.on()
    if lectura_4 > 6: led_4.off()

    if lectura_5 < 6: led_5.on()
    if lectura_5 > 6: led_5.off()

    if lectura_6 < 6: led_6.on()
    if lectura_6 > 6: led_6.off()

    if lectura_7 < 6: led_7.on()
    if lectura_7 > 6: led_7.off()
    
    
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#+++++++++++++++++++++++++++++++++++++++++++
# Timer de los sensores ------
# Creación del temporizador para la medición periódica
timer_medicion = machine.Timer(-1)
# Funcionamiento del temporizador para medir cada 2.5 segundos
timer_medicion.init(period=2500, mode=Timer.PERIODIC, callback=medir_sensores_ultrasonido)
# Configura un temporizador para el sensor de humedad
timer = machine.Timer(-1)
timer.init(period=2000, mode=machine.Timer.PERIODIC, callback=send_sensor_data)
#++++++++++++++++++++++++++++++++++++++++++++++++++

# *******************************************************************
#Comiensa el bucle principal del código 
while True:

    print('1 ',lectura_1)
    print('2 ',lectura_2)
    print('3 ',lectura_3)
    #Logica de los botones que controlan a los servo motores
    #--------------------------------------
    if boton_1.value() == 0:
        mover_sero_1()
        time.sleep(0.5)

    if boton_2.value() == 0:
        mover_sero_2()
        time.sleep(0.5)
    #--------------------------------------