menu-teclado-lcd-pwm(funca todo) (y el puerto serie tambien)

Dependencies:   TextLCD mbed

main.cpp

Committer:
josedaparte
Date:
2015-11-30
Revision:
2:a3cc9101e1c3
Parent:
1:9ab0f526b7a7
Child:
3:ef1eaeaf5c4e

File content as of revision 2:a3cc9101e1c3:

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

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

DigitalIn key1(PTE31);
DigitalIn key2(PTE19);
DigitalIn key3(PTE18);
DigitalIn key4(PTE17);
InterruptIn Enable(PTA13);
AnalogIn externo(PTC2);
AnalogIn interno(PTB3);

int temp = 26;
char tipo;
int sel = 1;
float casinterno;
float casexterno;
float tinterno;
float texterno;
char modo = 'M';
int set = 0;
int pdig, sdig, val;
int i = 0;
int tipobanio = 0;

int num, B1,B2,B3,B4;

void menu();
void selec();


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:
                pc.printf("case 1\n\r");
                break;
            case 2:
                pc.printf("case 2\n\r");
                break;
            case 3:
                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.printf("tipo banio");
                    lcd.cls();
                }
                break;
            case 4:
                pc.printf("case 4\n\r");
                break;
            case 5:
                if(i == 0) {
                    pdig = num;
                    pc.printf("%.1d\n\r", pdig);
                } else if(i == 1) {
                    sdig = num;
                    pc.printf("%.1d\n\r", sdig);
                    val = (pdig * 10) + sdig;
                    pc.printf("%.1d\n\r", val);
                }
                i++;
                if(i == 2) {
                    i = 0;
                }
                break;
            case 6:
                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.printf("tipo banio");
                    lcd.cls();
                }
                break;
        }
        pc.printf("salgo case\n\r");
    }
}

void menu ()
{
    lcd.cls();
    switch (sel) {
        case 1:
            lcd.locate(0,0);
            lcd.printf("auto");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ho:ra", texterno, tinterno, modo);
            sel = 2;
            break;
        case 2:
            lcd.locate(0,0);
            lcd.printf("manual");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ho:ra", texterno, tinterno, modo);
            sel = 3;
            break;
        case 3:
            lcd.locate(0,0);
            lcd.printf("reloj");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ho:ra", texterno, tinterno, modo);
            sel = 1;
            break;
        case 4:
            lcd.locate(0,0);
            lcd.printf("temperatura");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ho:ra", 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 ho:ra", texterno, tinterno, modo);
            sel = 6;
            break;
        case 6:
            lcd.locate(0,0);
            lcd.printf("horarios");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ho:ra", texterno, tinterno, modo);
            sel = 9;
            break;
        case 7:
            lcd.locate(0,0);
            lcd.printf("temperatura");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ho:ra", 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 ho:ra", texterno, tinterno, modo);
            sel = 10;
            break;
        case 9:
            lcd.locate(0,0);
            lcd.printf("salir");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ho:ra", texterno, tinterno, modo);
            sel = 4;
            break;
        case 10:
            lcd.locate(0,0);
            lcd.printf("salir");
            lcd.locate(0,1);
            lcd.printf("%.0fC %.0fC %c ho:ra", 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;
            wait(3);
            break;
        case 5:
            pc.printf("aca ingresaria la temperatura\r\n");
            set = 2;
            break;
        case 6:
            pc.printf("aca ingresaria el tipo de banio\r\n");
            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");
            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.printf(" 0_rap 1_norm");
            set = 6;
            break;
    }

}


int main()
{

    pc.baud(115200);
    Enable.rise(&func);

    int comp;
    while(1) {
//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;

        lcd.locate(0,1);
        lcd.printf("%.0fC %.0fC %c ho:ra", texterno, tinterno, modo);
        comp = tinterno;
        if(comp == temp)
            pc.printf("las temperaturas son iguales\n\r");
        else
            pc.printf("temperaturas distintas\n\r");
        wait(1);
    }
}