final

Dependencies:   TextLCD mbed

Fork of general by proyectotecnicas

main.cpp

Committer:
josedaparte
Date:
2015-12-07
Revision:
5:c047b49f74e7
Parent:
4:96c3f113f0b0
Child:
6:eb50c82e7d93

File content as of revision 5:c047b49f74e7:

#include "mbed.h"
#include "TextLCD.h"
#include "AnalogIn.h"

//clases
Timer t;
Serial pc(USBTX, USBRX);
TextLCD lcd(PTD3, PTA12, PTA4, PTA5, PTC8, PTC9, TextLCD::LCD16x2);

//entradas
DigitalIn key1(PTE31), key4(PTE17), key2(PTE19), key3(PTE18);
InterruptIn Enable(PTA13);
AnalogIn externo(PTC2),interno(PTB3), presionin(PTB2), pwment(PTB1);
PwmOut pwmsal(PTD2);

//declaracion de variables

char tipo, modo = 'M';
float tinterno, texterno, presion, casexterno, casinterno, caspresion, valorpwm;
int i = 0, j = 0, sel = 1, hora=0, min=0, seg=0, horain = 8, minin = 0, horafin = 22, minfin = 0, temp = 26;
int hh1, hh0, mm0, mm1, B1, B2, B3, B4, num, tempauto = 0, tipobanio = 0, pdig, sdig, tempmanual = 40, set = 0;
void menu();
void selec();
void func();

//funcion de set de hora
void sethora()
{
    if(i == 0) {                                                                //set de primer digito hora
        if(num > 2) {
            lcd.locate(0,0);
            lcd.printf("valor invalido");
            wait(.7);
            func();
        } else {
            hh1 = num;
            lcd.cls();
            lcd.printf("%dx:xx",hh1);
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
            wait(.7);
            i++;
        }
    } else                                                                      //fin de set 1er digito hora ok
        if(i == 1) {
            pc.printf("aca ingresaria 2 dig hora\n\r");                         //inicio 2do digito hora
            if(hh1 == 2 && num > 4) {
                lcd.locate(0,0);
                lcd.printf("valor invalido");
                wait(.7);
                func();
            } else {
                hh0 = num;
                lcd.cls();
                lcd.printf("%d%d:xx",hh1,hh0);
                lcd.locate(0,1);
                lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
                wait(.7);
                i++;
            }
        } else                                                              //fin 2do digito hora
            if(i == 2) {
                pc.printf("aca ingresaria 1 dig seg\n\r");                  //inicio 1er digito minuto
                if(num > 6) {
                    lcd.locate(0,0);
                    lcd.printf("valor invalido");
                    wait(.7);
                    func();
                } else {
                    mm1 = num;
                    lcd.cls();
                    lcd.printf("%d%d:%dx",hh1,hh0,mm1);
                    lcd.locate(0,1);
                    lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
                    wait(.7);
                    i++;
                }
            } else                                                           //fin 2do digito minuto
                if(i == 3) {
                    pc.printf("aca ingresaria 2 dig seg\n\r");              //inicio 2do digito minuto
                    if(mm1 == 6) {
                        mm0 = 0;
                    } else {
                        mm0 = num;
                    }
                    lcd.cls();
                    lcd.printf("%d%d:%d%d",hh1,hh0,mm1,mm0);
                    lcd.locate(0,1);
                    lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
                    i++;

                }                                                           //fin 2do digito minuto
}
// fin funcion set de hora

//funcion que imprime la hora
void imprimehora()
{
    lcd.locate(11,1);
    if(min < 10 && hora >= 10)
        lcd.printf("%2i:0%i", hora, min);
    if(hora < 10 && min >= 10)
        lcd.printf("0%i:%2i", hora, min);
    if(hora < 10 && min < 10)
        lcd.printf("0%i:0%i", hora, min);
    if(hora >= 10 && min >= 10)
        lcd.printf("%i:%i", hora, min);
}

//lectura de teclado y navegacion por menu
void func()
{
    B1 = key1.read();
    B2 = key2.read();
    B3 = key3.read();
    B4 = key4.read();

    num = 2*2*2*B1 + 2*2*B2 + 2*B3 + B4;
    pc.printf("llama a func\n\r");
    if(num == 10) {
        set = 0;
        menu();
    } else if(num == 11) {
        set = 0;
        selec();
    } else if(num != 10 && num != 11) {

        pc.printf("antes del case\n\r");
        switch(set) {
            case 0:
                pc.printf("case 0");
                break;
            case 1:                                                  //seteo hora
                sethora();
                if(i == 4) {                                        //pasa la hora al reloj
                    hora = (hh1 * 10) + hh0;
                    min = (mm1 * 10) + mm0;
                    hh0 = hh1 = mm1 = mm0 = 0;
                    t.start();
                    lcd.locate(0,0);
                    lcd.printf("reloj          ");
                    lcd.locate(0,1);
                    lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
                    i = 0;
                }
                break;                                                              //fin pasa hora al reloj
            case 2:
                pc.printf("ingreso temperaturas de auto\n\r");                    //set temperaturas auto
                if(num == 0 || num == 1 || num == 2) {
                    tempauto = num;
                    lcd.locate(0,0);
                    if(num == 0)
                        lcd.printf("tipo frio    ");
                    else if(num == 1)
                        lcd.printf("tipo normal  ");
                    else
                        lcd.printf("tipo caliente");
                    wait(1);
                    lcd.cls();
                    lcd.printf("temperatura");
                    set = 0;
                } else {
                    lcd.locate(0,0);
                    lcd.printf("valor invalido");
                    wait(1);
                    lcd.printf("tipo banio");
                    lcd.cls();
                }
                break;
            case 3:                                                                         //tipo de baño
                pc.printf("ingreso tipo banio %d\n\r",num);
                if(num == 0 || num == 1) {
                    tipobanio = num;
                    lcd.locate(0,0);
                    if(num == 0)
                        lcd.printf("banio rapido  ");
                    else
                        lcd.printf("banio normal  ");
                    wait(1);
                    lcd.cls();
                    lcd.printf("tipo banio  ");
                    pc.printf("%.1d\n\r", tipobanio);
                    set = 0;
                } else {
                    lcd.locate(0,0);
                    lcd.printf("valor invalido");
                    wait(1);
                    lcd.cls();
                    lcd.printf("tipo banio  ");
                }
                break;
            case 4:                                                             //set de horarios
                pc.printf("case 4\n\r");
                sethora();
                if(i == 4 && j == 0) {                                          //pasa la hora al reloj
                    horain = (hh1 * 10) + hh0;
                    minin = (mm1 * 10) + mm0;
                    hh0 = hh1 = mm1 = mm0 = 0;
                    lcd.locate(0,0);
                    lcd.printf("horario         ");
                    lcd.locate(0,1);
                    lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
                    pc.printf("hora de inicio %d:%d\n\r",horain,minin);
                    pc.printf("hora de fin %d:%d\n\r",horafin,minfin);
                    i = 0;
                    j = 1;
                }
                if(i == 4 && j == 1) {                                        //pasa la hora al reloj
                    horafin = (hh1 * 10) + hh0;
                    minfin = (mm1 * 10) + mm0;
                    hh0 = hh1 = mm1 = mm0 = 0;
                    lcd.locate(0,0);
                    lcd.printf("horario         ");
                    lcd.locate(0,1);
                    lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
                    pc.printf("hora de inicio %d:%d\n\r",horain,minin);
                    pc.printf("hora de fin %d:%d\n\r",horafin,minfin);
                    i = 0;
                    j = 0;
                }
                break;
            case 5:                                                 //set temperatura manual
                if(i == 0) {
                    pdig = num;
                    pc.printf("%.1d\n\r", pdig);
                } else if(i == 1) {
                    sdig = num;
                    pc.printf("%.1d\n\r", sdig);
                    tempmanual = (pdig * 10) + sdig;
                    pc.printf("%.1d\n\r", tempmanual);
                    imprimehora();
                    lcd.locate(0,0);
                    lcd.printf("temperatura a %d",tempmanual);
                    wait(1);
                    lcd.locate(0,0);
                    lcd.printf("temperatura     ");
                }
                i++;
                if(i == 2) {
                    i = 0;
                }
                break;
            case 6:                                                     //tipo de banio manual
                pc.printf("ingreso tipo banio %d\n\r",num);
                if(num == 0 || num == 1) {
                    tipobanio = num;
                    lcd.locate(0,0);
                    if(num == 0)
                        lcd.printf("banio rapido  ");
                    else
                        lcd.printf("banio normal  ");
                    wait(1);
                    lcd.cls();
                    lcd.printf("tipo banio  ");
                    pc.printf("%.1d\n\r", tipobanio);
                    set = 0;
                } else {
                    lcd.locate(0,0);
                    lcd.printf("valor invalido");
                    wait(1);
                    lcd.cls();
                    lcd.printf("tipo banio  ");
                }
                break;
        }
        pc.printf("salgo case\n\r");
        pc.printf("%d",i);
    }
}

//impresion de menu
void menu ()
{
    lcd.cls();
    imprimehora();
    switch (sel) {
        case 1:
            lcd.locate(0,0);
            lcd.printf("auto");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
            sel = 2;
            break;
        case 2:
            lcd.locate(0,0);
            lcd.printf("manual");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
            sel = 3;
            break;
        case 3:
            lcd.locate(0,0);
            lcd.printf("reloj");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
            sel = 1;
            break;
        case 4:
            lcd.locate(0,0);
            lcd.printf("temperatura");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
            sel = 5;
            break;
        case 5:
            lcd.locate(0,0);
            lcd.printf("tipo banio  ");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
            sel = 6;
            break;
        case 6:
            lcd.locate(0,0);
            lcd.printf("horarios");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
            sel = 9;
            break;
        case 7:
            lcd.locate(0,0);
            lcd.printf("temperatura");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
            sel = 8;
            break;
        case 8:
            lcd.locate(0,0);
            lcd.printf("tipo banio  ");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
            sel = 10;
            break;
        case 9:
            lcd.locate(0,0);
            lcd.printf("salir");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
            sel = 4;
            break;
        case 10:
            lcd.locate(0,0);
            lcd.printf("salir");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
            sel = 7;
            break;
    }
}


void selec()
{
    switch (sel) {
        case 2:
            modo = 'A';
            sel = 4;
            menu();
            break;
        case 3:
            modo = 'M';
            sel = 7;
            menu();
            break;
        case 1:
            pc.printf("aca ingresaria la hora\r\n");
            set = 1;
            break;
        case 5:
            pc.printf("aca ingresaria la temperatura\r\n");
            lcd.locate(0,0);
            lcd.printf(" 0_F 1_N 2_C");
            set = 2;
            break;
        case 6:
            pc.printf("aca ingresaria el tipo de banio\r\n");
            lcd.locate(0,0);
            lcd.printf(" 0_rap 1_norm");
            set = 3;
            break;
        case 4:
            sel = 1;
            menu();                                                         //salida1
            break;
        case 8:
            pc.printf("aca ingresaria la temperatura2\r\n");
            lcd.locate(0,0);
            lcd.printf("ingrese temperat");
            set = 5;
            break;
        case 7:
            sel = 2;
            menu();
            break;
        case 9:
            pc.printf("aca ingresaria el horario\r\n");
            set = 4;
            break;
        case 10:
            pc.printf("aca ingresaria tipo banio\r\n");
            lcd.locate(0,0);
            lcd.printf(" 0_rap 1_norm");
            set = 6;
            break;
    }

}

//programa principal
int main()
{
    t.start();
    pc.baud(115200);
    Enable.rise(&func);
    
    while(1) {
//reloj
        seg = t.read();
        if(seg == 60) {
            seg=0;
            t.reset();
            min++;
        }
        if(min==60) {
            min=0;
            hora++;
        }
        if(hora==24) {
            hora=0;
        }
        imprimehora();
//pwm
        pwmsal.period(5);
        valorpwm = pwment.read();
        pwmsal.write(valorpwm);
//convierte voltaje a temperatura
        casexterno = externo.read() * 3.3;
        texterno = (casexterno + 0.2) * 100 / 5;
        casinterno = interno.read() * 3.3;
        tinterno = (casinterno + 2) * 100 / 8;
//sensor de presion
        caspresion = presionin.read() * 3.3;
        if(caspresion >= 2.34){
            
            }
        if(caspresion >= 1.68 && caspresion <= 1.85){
           
            }
        if(caspresion <= 1.03){
                        
            }

        lcd.locate(0,1);
        lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);

        wait(1);
    }
}