#Intergantes: Angela Acero, Pablo Garzon, Maicol Cárdenas y Camilo Valderrama

from machine import Pin,ADC
from time import sleep
from lcd import LCD
# pines de la amtriz
R1 = 2
R2 = 4
R3 = 5
R4 = 19
C1 = 13
C2 = 12
C3 = 14
C4 = 27
# pines de la lcd

modo = 4
Rs = 26
enable = 25
Pines_datos = [16,17,18,21] #d5-7
lcd = LCD(mode = modo)
lcd.SetPines(Rs, enable,  Pines_datos)
lcd.Iniciar()

# acondiconador
Temp=None
T = ADC(Pin(34))
A = Pin(33, Pin.OUT)


grados = None
valores = None
grados_min = const(10)
grados_max = const(60)


n = 2
datos = [None]*n
i = 0
j = 0

#para pormedioar los datos de temp
t = 10
prom1 = [0]*t
prom2 = 0
prom4 = 0

#para el teclado

presionado = const(1)
sinPresion = const(0)
teclas =[['1', '2', '3', '0'], ['4', '5', '6', '0'], ['7', '8', '9', '0'], ['°', '0', '0', 'D']]


filas = [R1,R2,R3,R4]
columnas = [C1,C2,C3,C4]

p_filas = [Pin(p_name, mode = Pin.OUT)for p_name in filas]
p_columnas = [Pin(p_name, mode=Pin.IN, pull=Pin.PULL_DOWN) for p_name in columnas]



def start() :
    for fila2 in range (0,4):
        for col in range (0,4):
            p_filas[fila2].value(0)

def leer (fila2,columna2):
    p_filas[fila2].value(1)

    key = None

    if p_columnas[columna2].value() == presionado:
        key = presionado

    if p_columnas[columna2].value() == sinPresion:
        key = sinPresion

    p_filas [fila2].value(0)
    
    return key 



def macuin (i):

    for fila2 in range(4):
        for columna2 in range(4):
            tecla2 = leer(fila2, columna2)
            if tecla2 == presionado:

                grados = (teclas[fila2][columna2])
                datos[i] = grados
                sleep(0.2)
                lcd.Print(grados,0,7+i)
                sleep(0.5)
                i += 1
        
    return i
    
def concatenacion (grados):
    grados = "".join(datos[0:3])

    return grados



def reset (j):
    for fila2 in range(4):
        for columna2 in range(4):
            tecla2 = leer(fila2, columna2)
            if tecla2 == presionado:
                algo = (teclas[fila2][columna2])
                if algo == 'D':  
                    sleep(0.5)
                    lcd.Clear()
                    A.value(0)
                    datos = [None]*n
                    valores = None
                    grados = None
                    Temp = None
                    j = 1
                    
    return j


print ("telcee")
start()
lcd.Clear()
lcd.Print("INICIANDO...")
sleep(1)
lcd.Clear()
sleep(0.5)
lcd.Print("temp: ")

while True:
    j = reset(j)
    if j == 1: 
        Valor = T.read()   
        V=Valor*(3.3/4095) 
        Temp = 34.65016972086*V 
        grados = None
        i = 0

        if Temp >=9 :
            lcd.Print("Bajando temperatrua")
        else: 
            prom4 = 0
            prom1[9] = 0
                
            prom2 = 0
            j = 0
            lcd.Clear()
            sleep(1)
            lcd.Print("Temp: ")
            
    if i < 2:
        i = macuin(i)
    else:
        grados = concatenacion(grados)
        valores = int(grados)

    if grados is not None:

        lcd.Print("°C",0,10)
        for i in range (1,10):
            Valor = T.read()   #leer voltaje
            V=Valor*(3.3/4095) #Voltaje para la temperatura caracterizada desde el voltaje del sensor
            Temp=34.65016972086*V #temperatura caracteriada por el voltaje que el mismo sensor saca
            
            prom1[i-1] = prom1[i]

            prom1[9] = int(Temp)

        for i in range (1,10):
            prom2 = prom2 + prom1[i] 
        prom2 = prom2 / t 
        prom4 = str(int(prom2)+1)
    
        Gato = valores
        if Temp < Gato :
            A.value(1)
        else:
            A.value(0)

        if grados_min <= valores <= grados_max:
            lcd.Print("Temp leida:",1,0)
            lcd.Print(prom4,1,12)

        else:
            sleep(1)
            lcd.Clear()
            sleep(1)
            lcd.Print("ERROR: temperatura")
            lcd.Print("fuera del " ,1,4)
            lcd.Print("rango (10-60)",2,3)
            sleep(1)
            lcd.Clear()
            lcd.Print("Temp: ")
            i = 0
            grados = None




Aire AcondicionadoBreakout