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

Dependencies:   TextLCD mbed

Revision:
9:364316a55827
Parent:
8:5cfa4b38ddf1
--- a/main.cpp	Mon Dec 14 15:53:14 2015 +0000
+++ b/main.cpp	Wed Dec 16 01:19:25 2015 +0000
@@ -14,16 +14,60 @@
 AnalogIn externo(PTC2),interno(PTB3), presionin(PTB2), pident(PTB1);
 AnalogOut vref(PTE30);
 PwmOut pwmsal(PTD2);
+DigitalOut evalvula(PTE1);
 
 //declaracion de variables
 char tipo, modo = 'M';
-float tinterno, texterno, presion, casexterno, casinterno, caspresion, valorpwm, valorpid, vrefe = 1;
-float Tres=0, optimo=0;
-int i = 0, j = 0, sel = 1, hora=0, min=0, seg=0, horain = 8, minin = 0, horafin = 22, minfin = 0, temp = 26;
+float tinterno, texterno, presion, casexterno, casinterno, caspresion, valorpwm, valorpid, vrefe;
+float tres, optimo=0;
+int i = 0, j = 0, sel = 1, hora=0, min=0, seg=0, horain = 8, minin = 0, horafin = 22, minfin = 0, temp = 26, cont=0, ev= 1;
 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();
+
+void funpresion()                                              //funcion de vaciado llenado
+{
+    caspresion = presionin.read() * 3.3;
+    pc.printf("analogin %.2f\n\r", caspresion);
+
+    switch(tipobanio) {
+        case 0:                             //baño rapido
+            if(caspresion >= 2.2) {         //se lleno
+                pc.printf("se lleno y apago ev\n\r");
+                ev = 0;
+            }
+            if(caspresion <=  1.53) {        //se vacio
+                cont++;
+                pc.printf("se vacio\n\r");
+                pc.printf("%d\n\r", cont);
+                if(cont > 20) {           //contador
+                    ev = 1;
+                    cont = 0;
+                    pc.printf("se activa la ev\n\r");
+                }
+            }
+            break;
+        case 1:                             //baño normal
+            if(caspresion >= 2.6) {         //se lleno
+                pc.printf("se lleno y apago ev\n\r");
+                ev = 0;
+            }
+            if(caspresion <= 1.53) {        //se vacio
+                cont++;
+                pc.printf("se vacio\n\r");
+                pc.printf("%d\n\r", cont);
+                if(cont == 20) {           //contador
+                    ev = 1;
+                    cont = 0;
+                    pc.printf("se activa la ev\n\r");
+                }
+            }
+            break;
+    }                                       //fin switch
+    evalvula.write(ev);
+}                                           //fin funcion
+
 //recibe tension de referencia cambiar por que reciba la de el teclado o del externo
 void modotemp()
 {
@@ -34,45 +78,47 @@
                 if ((hora > horain||(hora == horain && min >= minin)) && ( hora < horafin ||(hora == horafin && min <= minfin))) {
                     optimo= -(11/10*texterno)+50;
                     if (optimo > 25 && optimo < 65) {
-                        Tres = optimo;
+                        tres = optimo;
                     } else {
-                        Tres = tinterno;
+                        tres = tinterno;
                     }
                 } else {
-                    Tres = tinterno;
+                    tres = tinterno;
                 }
                 break;
             case 1:
                 if ((hora > horain||(hora == horain && min >= minin)) && ( hora < horafin ||(hora == horafin && min <= minfin))) {
                     optimo= -(11/10*texterno)+55;
                     if (optimo > 25 && optimo < 65) {
-                        Tres = optimo;
+                        tres = optimo;
                     } else {
-                        Tres = tinterno;
+                        tres = tinterno;
                     }
                 } else {
-                    Tres = tinterno;
+                    tres = tinterno;
                 }
                 break;
             case 2:
                 if ((hora > horain||(hora == horain && min >= minin)) && ( hora < horafin ||(hora == horafin && min <= minfin))) {
                     optimo= -(11/10*texterno)+65;
                     if (optimo > 25 && optimo < 65 ) {
-                        Tres = optimo;
+                        tres = optimo;
 
                     } else {
-                        Tres = tinterno;
+                        tres = tinterno;
                     }
                 } else {
-                    Tres = tinterno;
+                    tres = tinterno;
                 }
                 break;
         }
     }
     if (modo == 'M') {
-        Tres = tempmanual;
+        tres = tempmanual;
     }
-    vrefe = ((Tres * 8 / 100) - 2) / 3.3;
+    vrefe = ((tres * 8 / 100) - 2) / 3.3;
+    pc.printf("vrefe= %.2f tres= %.0f\n\r",vrefe, tres);
+    wait(2);
 }
 //funcion del pwm
 
@@ -80,15 +126,20 @@
 {
     if(vrefe <= 1 && vrefe >= 0) {
         vref.write(vrefe);
+         pc.printf("vrefe= %.4f de salida vref\n\r",vrefe);
     }
     valorpid = pident.read() * 3.3;
-    if(valorpid >1)
+    if(valorpid >1){
         pwmsal.write(1);
+        pc.printf("vrefe= %.4f del 1 if\n\r",vrefe);}
     else if(valorpid <= 1 && valorpid >= 0.6) {
         valorpwm = 2.5 * valorpid - 1.5;
+        pc.printf("vrefe= %.4f del 2 if\n\r",vrefe);
         pwmsal.write(valorpwm);
-    } else
+    } else{
         pwmsal.write(0);
+        pc.printf("vrefe= %.4f del else\n\r",vrefe);}
+        pc.printf("valorpid=%.4f\n\r",valorpid);
 }
 
 //funcion de set de hora
@@ -111,7 +162,7 @@
         }
     } else                                                                      //fin de set 1er digito hora ok
         if(i == 1) {
-            pc.printf("aca ingresaria 2 dig hora\n\r");                         //inicio 2do digito hora
+            //inicio 2do digito hora
             if(hh1 == 2 && num > 4) {
                 lcd.locate(0,0);
                 lcd.printf("valor invalido");
@@ -127,8 +178,7 @@
                 i++;
             }
         } else                                                              //fin 2do digito hora
-            if(i == 2) {
-                pc.printf("aca ingresaria 1 dig seg\n\r");                  //inicio 1er digito minuto
+            if(i == 2) {                  //inicio 1er digito minuto
                 if(num > 6) {
                     lcd.locate(0,0);
                     lcd.printf("valor invalido");
@@ -144,8 +194,7 @@
                     i++;
                 }
             } else                                                           //fin 2do digito minuto
-                if(i == 3) {
-                    pc.printf("aca ingresaria 2 dig seg\n\r");              //inicio 2do digito minuto
+                if(i == 3) {      //inicio 2do digito minuto
                     if(mm1 == 6) {
                         mm0 = 0;
                     } else {
@@ -182,7 +231,6 @@
     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();
@@ -191,10 +239,9 @@
         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();
@@ -210,8 +257,7 @@
                     i = 0;
                 }
                 break;                                                              //fin pasa hora al reloj
-            case 2:
-                pc.printf("ingreso temperaturas de auto\n\r");                    //set temperaturas auto
+            case 2:               //set temperaturas auto
                 if(num == 0 || num == 1 || num == 2) {
                     tempauto = num;
                     lcd.locate(0,0);
@@ -234,7 +280,6 @@
                 }
                 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);
@@ -245,7 +290,6 @@
                     wait(1);
                     lcd.cls();
                     lcd.printf("tipo banio  ");
-                    pc.printf("%.1d\n\r", tipobanio);
                     set = 0;
                 } else {
                     lcd.locate(0,0);
@@ -256,7 +300,6 @@
                 }
                 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;
@@ -266,8 +309,6 @@
                     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;
                 }
@@ -279,8 +320,6 @@
                     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;
                 }
@@ -288,16 +327,15 @@
             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;
                     if(tempmanual >= 65) {
-                        tempmanual = 65;}
-                    if(tempmanual <= 25){
-                        tempmanual = 25;}
-                    pc.printf("%.1d\n\r", tempmanual);
+                        tempmanual = 65;
+                    }
+                    if(tempmanual <= 25) {
+                        tempmanual = 25;
+                    }
                     imprimehora();
                     lcd.locate(0,0);
                     lcd.printf("temperatura a %d",tempmanual);
@@ -311,7 +349,6 @@
                 }
                 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);
@@ -322,7 +359,6 @@
                     wait(1);
                     lcd.cls();
                     lcd.printf("tipo banio  ");
-                    pc.printf("%.1d\n\r", tipobanio);
                     set = 0;
                 } else {
                     lcd.locate(0,0);
@@ -333,8 +369,6 @@
                 }
                 break;
         }
-        pc.printf("salgo case\n\r");
-        pc.printf("%d",i);
     }
 }
 
@@ -431,17 +465,14 @@
             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;
@@ -451,7 +482,6 @@
             menu();                                                         //salida1
             break;
         case 8:
-            pc.printf("aca ingresaria la temperatura2\r\n");
             lcd.locate(0,0);
             lcd.printf("ingrese temperat");
             set = 5;
@@ -461,11 +491,9 @@
             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;
@@ -503,21 +531,11 @@
         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);
         pwm();
+        funpresion();
         wait(1);
     }           //fin wile
 }
\ No newline at end of file