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

Dependencies:   TextLCD mbed

Committer:
josedaparte
Date:
Wed Dec 16 01:19:25 2015 +0000
Revision:
9:364316a55827
Parent:
8:5cfa4b38ddf1
programacompleto;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
josedaparte 0:1334d6f26f42 1 #include "mbed.h"
josedaparte 0:1334d6f26f42 2 #include "TextLCD.h"
josedaparte 0:1334d6f26f42 3 #include "AnalogIn.h"
josedaparte 8:5cfa4b38ddf1 4 #include "Serial.h"
josedaparte 0:1334d6f26f42 5
josedaparte 5:c047b49f74e7 6 //clases
josedaparte 5:c047b49f74e7 7 Timer t;
josedaparte 0:1334d6f26f42 8 Serial pc(USBTX, USBRX);
josedaparte 0:1334d6f26f42 9 TextLCD lcd(PTD3, PTA12, PTA4, PTA5, PTC8, PTC9, TextLCD::LCD16x2);
josedaparte 0:1334d6f26f42 10
josedaparte 5:c047b49f74e7 11 //entradas
josedaparte 5:c047b49f74e7 12 DigitalIn key1(PTE31), key4(PTE17), key2(PTE19), key3(PTE18);
josedaparte 1:9ab0f526b7a7 13 InterruptIn Enable(PTA13);
josedaparte 8:5cfa4b38ddf1 14 AnalogIn externo(PTC2),interno(PTB3), presionin(PTB2), pident(PTB1);
josedaparte 8:5cfa4b38ddf1 15 AnalogOut vref(PTE30);
josedaparte 5:c047b49f74e7 16 PwmOut pwmsal(PTD2);
josedaparte 9:364316a55827 17 DigitalOut evalvula(PTE1);
josedaparte 0:1334d6f26f42 18
josedaparte 5:c047b49f74e7 19 //declaracion de variables
josedaparte 5:c047b49f74e7 20 char tipo, modo = 'M';
josedaparte 9:364316a55827 21 float tinterno, texterno, presion, casexterno, casinterno, caspresion, valorpwm, valorpid, vrefe;
josedaparte 9:364316a55827 22 float tres, optimo=0;
josedaparte 9:364316a55827 23 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;
josedaparte 5:c047b49f74e7 24 int hh1, hh0, mm0, mm1, B1, B2, B3, B4, num, tempauto = 0, tipobanio = 0, pdig, sdig, tempmanual = 40, set = 0;
josedaparte 0:1334d6f26f42 25 void menu();
josedaparte 0:1334d6f26f42 26 void selec();
josedaparte 4:96c3f113f0b0 27 void func();
josedaparte 9:364316a55827 28
josedaparte 9:364316a55827 29 void funpresion() //funcion de vaciado llenado
josedaparte 9:364316a55827 30 {
josedaparte 9:364316a55827 31 caspresion = presionin.read() * 3.3;
josedaparte 9:364316a55827 32 pc.printf("analogin %.2f\n\r", caspresion);
josedaparte 9:364316a55827 33
josedaparte 9:364316a55827 34 switch(tipobanio) {
josedaparte 9:364316a55827 35 case 0: //baño rapido
josedaparte 9:364316a55827 36 if(caspresion >= 2.2) { //se lleno
josedaparte 9:364316a55827 37 pc.printf("se lleno y apago ev\n\r");
josedaparte 9:364316a55827 38 ev = 0;
josedaparte 9:364316a55827 39 }
josedaparte 9:364316a55827 40 if(caspresion <= 1.53) { //se vacio
josedaparte 9:364316a55827 41 cont++;
josedaparte 9:364316a55827 42 pc.printf("se vacio\n\r");
josedaparte 9:364316a55827 43 pc.printf("%d\n\r", cont);
josedaparte 9:364316a55827 44 if(cont > 20) { //contador
josedaparte 9:364316a55827 45 ev = 1;
josedaparte 9:364316a55827 46 cont = 0;
josedaparte 9:364316a55827 47 pc.printf("se activa la ev\n\r");
josedaparte 9:364316a55827 48 }
josedaparte 9:364316a55827 49 }
josedaparte 9:364316a55827 50 break;
josedaparte 9:364316a55827 51 case 1: //baño normal
josedaparte 9:364316a55827 52 if(caspresion >= 2.6) { //se lleno
josedaparte 9:364316a55827 53 pc.printf("se lleno y apago ev\n\r");
josedaparte 9:364316a55827 54 ev = 0;
josedaparte 9:364316a55827 55 }
josedaparte 9:364316a55827 56 if(caspresion <= 1.53) { //se vacio
josedaparte 9:364316a55827 57 cont++;
josedaparte 9:364316a55827 58 pc.printf("se vacio\n\r");
josedaparte 9:364316a55827 59 pc.printf("%d\n\r", cont);
josedaparte 9:364316a55827 60 if(cont == 20) { //contador
josedaparte 9:364316a55827 61 ev = 1;
josedaparte 9:364316a55827 62 cont = 0;
josedaparte 9:364316a55827 63 pc.printf("se activa la ev\n\r");
josedaparte 9:364316a55827 64 }
josedaparte 9:364316a55827 65 }
josedaparte 9:364316a55827 66 break;
josedaparte 9:364316a55827 67 } //fin switch
josedaparte 9:364316a55827 68 evalvula.write(ev);
josedaparte 9:364316a55827 69 } //fin funcion
josedaparte 9:364316a55827 70
josedaparte 8:5cfa4b38ddf1 71 //recibe tension de referencia cambiar por que reciba la de el teclado o del externo
josedaparte 8:5cfa4b38ddf1 72 void modotemp()
josedaparte 8:5cfa4b38ddf1 73 {
josedaparte 8:5cfa4b38ddf1 74 if (modo == 'A') {
josedaparte 8:5cfa4b38ddf1 75 switch (tempauto) {
josedaparte 8:5cfa4b38ddf1 76
josedaparte 8:5cfa4b38ddf1 77 case 0:
josedaparte 8:5cfa4b38ddf1 78 if ((hora > horain||(hora == horain && min >= minin)) && ( hora < horafin ||(hora == horafin && min <= minfin))) {
josedaparte 8:5cfa4b38ddf1 79 optimo= -(11/10*texterno)+50;
josedaparte 8:5cfa4b38ddf1 80 if (optimo > 25 && optimo < 65) {
josedaparte 9:364316a55827 81 tres = optimo;
josedaparte 8:5cfa4b38ddf1 82 } else {
josedaparte 9:364316a55827 83 tres = tinterno;
josedaparte 8:5cfa4b38ddf1 84 }
josedaparte 8:5cfa4b38ddf1 85 } else {
josedaparte 9:364316a55827 86 tres = tinterno;
josedaparte 8:5cfa4b38ddf1 87 }
josedaparte 8:5cfa4b38ddf1 88 break;
josedaparte 8:5cfa4b38ddf1 89 case 1:
josedaparte 8:5cfa4b38ddf1 90 if ((hora > horain||(hora == horain && min >= minin)) && ( hora < horafin ||(hora == horafin && min <= minfin))) {
josedaparte 8:5cfa4b38ddf1 91 optimo= -(11/10*texterno)+55;
josedaparte 8:5cfa4b38ddf1 92 if (optimo > 25 && optimo < 65) {
josedaparte 9:364316a55827 93 tres = optimo;
josedaparte 8:5cfa4b38ddf1 94 } else {
josedaparte 9:364316a55827 95 tres = tinterno;
josedaparte 8:5cfa4b38ddf1 96 }
josedaparte 8:5cfa4b38ddf1 97 } else {
josedaparte 9:364316a55827 98 tres = tinterno;
josedaparte 8:5cfa4b38ddf1 99 }
josedaparte 8:5cfa4b38ddf1 100 break;
josedaparte 8:5cfa4b38ddf1 101 case 2:
josedaparte 8:5cfa4b38ddf1 102 if ((hora > horain||(hora == horain && min >= minin)) && ( hora < horafin ||(hora == horafin && min <= minfin))) {
josedaparte 8:5cfa4b38ddf1 103 optimo= -(11/10*texterno)+65;
josedaparte 8:5cfa4b38ddf1 104 if (optimo > 25 && optimo < 65 ) {
josedaparte 9:364316a55827 105 tres = optimo;
josedaparte 8:5cfa4b38ddf1 106
josedaparte 8:5cfa4b38ddf1 107 } else {
josedaparte 9:364316a55827 108 tres = tinterno;
josedaparte 8:5cfa4b38ddf1 109 }
josedaparte 8:5cfa4b38ddf1 110 } else {
josedaparte 9:364316a55827 111 tres = tinterno;
josedaparte 8:5cfa4b38ddf1 112 }
josedaparte 8:5cfa4b38ddf1 113 break;
josedaparte 8:5cfa4b38ddf1 114 }
josedaparte 8:5cfa4b38ddf1 115 }
josedaparte 8:5cfa4b38ddf1 116 if (modo == 'M') {
josedaparte 9:364316a55827 117 tres = tempmanual;
josedaparte 8:5cfa4b38ddf1 118 }
josedaparte 9:364316a55827 119 vrefe = ((tres * 8 / 100) - 2) / 3.3;
josedaparte 9:364316a55827 120 pc.printf("vrefe= %.2f tres= %.0f\n\r",vrefe, tres);
josedaparte 9:364316a55827 121 wait(2);
josedaparte 8:5cfa4b38ddf1 122 }
josedaparte 8:5cfa4b38ddf1 123 //funcion del pwm
josedaparte 8:5cfa4b38ddf1 124
josedaparte 8:5cfa4b38ddf1 125 void pwm()
josedaparte 8:5cfa4b38ddf1 126 {
josedaparte 8:5cfa4b38ddf1 127 if(vrefe <= 1 && vrefe >= 0) {
josedaparte 8:5cfa4b38ddf1 128 vref.write(vrefe);
josedaparte 9:364316a55827 129 pc.printf("vrefe= %.4f de salida vref\n\r",vrefe);
josedaparte 8:5cfa4b38ddf1 130 }
josedaparte 8:5cfa4b38ddf1 131 valorpid = pident.read() * 3.3;
josedaparte 9:364316a55827 132 if(valorpid >1){
josedaparte 8:5cfa4b38ddf1 133 pwmsal.write(1);
josedaparte 9:364316a55827 134 pc.printf("vrefe= %.4f del 1 if\n\r",vrefe);}
josedaparte 8:5cfa4b38ddf1 135 else if(valorpid <= 1 && valorpid >= 0.6) {
josedaparte 8:5cfa4b38ddf1 136 valorpwm = 2.5 * valorpid - 1.5;
josedaparte 9:364316a55827 137 pc.printf("vrefe= %.4f del 2 if\n\r",vrefe);
josedaparte 8:5cfa4b38ddf1 138 pwmsal.write(valorpwm);
josedaparte 9:364316a55827 139 } else{
josedaparte 8:5cfa4b38ddf1 140 pwmsal.write(0);
josedaparte 9:364316a55827 141 pc.printf("vrefe= %.4f del else\n\r",vrefe);}
josedaparte 9:364316a55827 142 pc.printf("valorpid=%.4f\n\r",valorpid);
josedaparte 8:5cfa4b38ddf1 143 }
josedaparte 4:96c3f113f0b0 144
josedaparte 5:c047b49f74e7 145 //funcion de set de hora
josedaparte 5:c047b49f74e7 146 void sethora()
josedaparte 5:c047b49f74e7 147 {
josedaparte 5:c047b49f74e7 148 if(i == 0) { //set de primer digito hora
josedaparte 5:c047b49f74e7 149 if(num > 2) {
josedaparte 5:c047b49f74e7 150 lcd.locate(0,0);
josedaparte 5:c047b49f74e7 151 lcd.printf("valor invalido");
josedaparte 5:c047b49f74e7 152 wait(.7);
josedaparte 5:c047b49f74e7 153 func();
josedaparte 5:c047b49f74e7 154 } else {
josedaparte 5:c047b49f74e7 155 hh1 = num;
josedaparte 5:c047b49f74e7 156 lcd.cls();
josedaparte 5:c047b49f74e7 157 lcd.printf("%dx:xx",hh1);
josedaparte 5:c047b49f74e7 158 lcd.locate(0,1);
josedaparte 5:c047b49f74e7 159 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 5:c047b49f74e7 160 wait(.7);
josedaparte 5:c047b49f74e7 161 i++;
josedaparte 5:c047b49f74e7 162 }
josedaparte 5:c047b49f74e7 163 } else //fin de set 1er digito hora ok
josedaparte 5:c047b49f74e7 164 if(i == 1) {
josedaparte 9:364316a55827 165 //inicio 2do digito hora
josedaparte 5:c047b49f74e7 166 if(hh1 == 2 && num > 4) {
josedaparte 5:c047b49f74e7 167 lcd.locate(0,0);
josedaparte 5:c047b49f74e7 168 lcd.printf("valor invalido");
josedaparte 5:c047b49f74e7 169 wait(.7);
josedaparte 5:c047b49f74e7 170 func();
josedaparte 5:c047b49f74e7 171 } else {
josedaparte 5:c047b49f74e7 172 hh0 = num;
josedaparte 5:c047b49f74e7 173 lcd.cls();
josedaparte 5:c047b49f74e7 174 lcd.printf("%d%d:xx",hh1,hh0);
josedaparte 5:c047b49f74e7 175 lcd.locate(0,1);
josedaparte 5:c047b49f74e7 176 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 5:c047b49f74e7 177 wait(.7);
josedaparte 5:c047b49f74e7 178 i++;
josedaparte 5:c047b49f74e7 179 }
josedaparte 5:c047b49f74e7 180 } else //fin 2do digito hora
josedaparte 9:364316a55827 181 if(i == 2) { //inicio 1er digito minuto
josedaparte 5:c047b49f74e7 182 if(num > 6) {
josedaparte 5:c047b49f74e7 183 lcd.locate(0,0);
josedaparte 5:c047b49f74e7 184 lcd.printf("valor invalido");
josedaparte 5:c047b49f74e7 185 wait(.7);
josedaparte 5:c047b49f74e7 186 func();
josedaparte 5:c047b49f74e7 187 } else {
josedaparte 5:c047b49f74e7 188 mm1 = num;
josedaparte 5:c047b49f74e7 189 lcd.cls();
josedaparte 5:c047b49f74e7 190 lcd.printf("%d%d:%dx",hh1,hh0,mm1);
josedaparte 5:c047b49f74e7 191 lcd.locate(0,1);
josedaparte 5:c047b49f74e7 192 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 5:c047b49f74e7 193 wait(.7);
josedaparte 5:c047b49f74e7 194 i++;
josedaparte 5:c047b49f74e7 195 }
josedaparte 5:c047b49f74e7 196 } else //fin 2do digito minuto
josedaparte 9:364316a55827 197 if(i == 3) { //inicio 2do digito minuto
josedaparte 5:c047b49f74e7 198 if(mm1 == 6) {
josedaparte 5:c047b49f74e7 199 mm0 = 0;
josedaparte 5:c047b49f74e7 200 } else {
josedaparte 5:c047b49f74e7 201 mm0 = num;
josedaparte 5:c047b49f74e7 202 }
josedaparte 5:c047b49f74e7 203 lcd.cls();
josedaparte 5:c047b49f74e7 204 lcd.printf("%d%d:%d%d",hh1,hh0,mm1,mm0);
josedaparte 5:c047b49f74e7 205 lcd.locate(0,1);
josedaparte 5:c047b49f74e7 206 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 5:c047b49f74e7 207 i++;
josedaparte 5:c047b49f74e7 208 } //fin 2do digito minuto
josedaparte 5:c047b49f74e7 209 }
josedaparte 5:c047b49f74e7 210 // fin funcion set de hora
josedaparte 5:c047b49f74e7 211
josedaparte 5:c047b49f74e7 212 //funcion que imprime la hora
josedaparte 5:c047b49f74e7 213 void imprimehora()
josedaparte 5:c047b49f74e7 214 {
josedaparte 5:c047b49f74e7 215 lcd.locate(11,1);
josedaparte 5:c047b49f74e7 216 if(min < 10 && hora >= 10)
josedaparte 3:ef1eaeaf5c4e 217 lcd.printf("%2i:0%i", hora, min);
josedaparte 5:c047b49f74e7 218 if(hora < 10 && min >= 10)
josedaparte 3:ef1eaeaf5c4e 219 lcd.printf("0%i:%2i", hora, min);
josedaparte 5:c047b49f74e7 220 if(hora < 10 && min < 10)
josedaparte 3:ef1eaeaf5c4e 221 lcd.printf("0%i:0%i", hora, min);
josedaparte 5:c047b49f74e7 222 if(hora >= 10 && min >= 10)
josedaparte 3:ef1eaeaf5c4e 223 lcd.printf("%i:%i", hora, min);
josedaparte 5:c047b49f74e7 224 }
josedaparte 0:1334d6f26f42 225
josedaparte 5:c047b49f74e7 226 //lectura de teclado y navegacion por menu
josedaparte 0:1334d6f26f42 227 void func()
josedaparte 0:1334d6f26f42 228 {
josedaparte 0:1334d6f26f42 229 B1 = key1.read();
josedaparte 0:1334d6f26f42 230 B2 = key2.read();
josedaparte 0:1334d6f26f42 231 B3 = key3.read();
josedaparte 0:1334d6f26f42 232 B4 = key4.read();
josedaparte 0:1334d6f26f42 233 num = 2*2*2*B1 + 2*2*B2 + 2*B3 + B4;
josedaparte 2:a3cc9101e1c3 234 if(num == 10) {
josedaparte 2:a3cc9101e1c3 235 set = 0;
josedaparte 0:1334d6f26f42 236 menu();
josedaparte 2:a3cc9101e1c3 237 } else if(num == 11) {
josedaparte 2:a3cc9101e1c3 238 set = 0;
josedaparte 2:a3cc9101e1c3 239 selec();
josedaparte 2:a3cc9101e1c3 240 } else if(num != 10 && num != 11) {
josedaparte 0:1334d6f26f42 241
josedaparte 9:364316a55827 242
josedaparte 2:a3cc9101e1c3 243 switch(set) {
josedaparte 2:a3cc9101e1c3 244 case 0:
josedaparte 2:a3cc9101e1c3 245 break;
josedaparte 5:c047b49f74e7 246 case 1: //seteo hora
josedaparte 5:c047b49f74e7 247 sethora();
josedaparte 5:c047b49f74e7 248 if(i == 4) { //pasa la hora al reloj
josedaparte 5:c047b49f74e7 249 hora = (hh1 * 10) + hh0;
josedaparte 5:c047b49f74e7 250 min = (mm1 * 10) + mm0;
josedaparte 5:c047b49f74e7 251 hh0 = hh1 = mm1 = mm0 = 0;
josedaparte 5:c047b49f74e7 252 t.start();
josedaparte 5:c047b49f74e7 253 lcd.locate(0,0);
josedaparte 5:c047b49f74e7 254 lcd.printf("reloj ");
josedaparte 5:c047b49f74e7 255 lcd.locate(0,1);
josedaparte 5:c047b49f74e7 256 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 5:c047b49f74e7 257 i = 0;
josedaparte 5:c047b49f74e7 258 }
josedaparte 5:c047b49f74e7 259 break; //fin pasa hora al reloj
josedaparte 9:364316a55827 260 case 2: //set temperaturas auto
josedaparte 3:ef1eaeaf5c4e 261 if(num == 0 || num == 1 || num == 2) {
josedaparte 3:ef1eaeaf5c4e 262 tempauto = num;
josedaparte 3:ef1eaeaf5c4e 263 lcd.locate(0,0);
josedaparte 3:ef1eaeaf5c4e 264 if(num == 0)
josedaparte 3:ef1eaeaf5c4e 265 lcd.printf("tipo frio ");
josedaparte 3:ef1eaeaf5c4e 266 else if(num == 1)
josedaparte 3:ef1eaeaf5c4e 267 lcd.printf("tipo normal ");
josedaparte 5:c047b49f74e7 268 else
josedaparte 5:c047b49f74e7 269 lcd.printf("tipo caliente");
josedaparte 3:ef1eaeaf5c4e 270 wait(1);
josedaparte 3:ef1eaeaf5c4e 271 lcd.cls();
josedaparte 3:ef1eaeaf5c4e 272 lcd.printf("temperatura");
josedaparte 3:ef1eaeaf5c4e 273 set = 0;
josedaparte 3:ef1eaeaf5c4e 274 } else {
josedaparte 3:ef1eaeaf5c4e 275 lcd.locate(0,0);
josedaparte 3:ef1eaeaf5c4e 276 lcd.printf("valor invalido");
josedaparte 3:ef1eaeaf5c4e 277 wait(1);
josedaparte 3:ef1eaeaf5c4e 278 lcd.printf("tipo banio");
josedaparte 3:ef1eaeaf5c4e 279 lcd.cls();
josedaparte 3:ef1eaeaf5c4e 280 }
josedaparte 2:a3cc9101e1c3 281 break;
josedaparte 5:c047b49f74e7 282 case 3: //tipo de baño
josedaparte 2:a3cc9101e1c3 283 if(num == 0 || num == 1) {
josedaparte 2:a3cc9101e1c3 284 tipobanio = num;
josedaparte 2:a3cc9101e1c3 285 lcd.locate(0,0);
josedaparte 2:a3cc9101e1c3 286 if(num == 0)
josedaparte 3:ef1eaeaf5c4e 287 lcd.printf("banio rapido ");
josedaparte 2:a3cc9101e1c3 288 else
josedaparte 3:ef1eaeaf5c4e 289 lcd.printf("banio normal ");
josedaparte 2:a3cc9101e1c3 290 wait(1);
josedaparte 2:a3cc9101e1c3 291 lcd.cls();
josedaparte 3:ef1eaeaf5c4e 292 lcd.printf("tipo banio ");
josedaparte 2:a3cc9101e1c3 293 set = 0;
josedaparte 2:a3cc9101e1c3 294 } else {
josedaparte 2:a3cc9101e1c3 295 lcd.locate(0,0);
josedaparte 2:a3cc9101e1c3 296 lcd.printf("valor invalido");
josedaparte 2:a3cc9101e1c3 297 wait(1);
josedaparte 2:a3cc9101e1c3 298 lcd.cls();
josedaparte 3:ef1eaeaf5c4e 299 lcd.printf("tipo banio ");
josedaparte 2:a3cc9101e1c3 300 }
josedaparte 2:a3cc9101e1c3 301 break;
josedaparte 5:c047b49f74e7 302 case 4: //set de horarios
josedaparte 5:c047b49f74e7 303 sethora();
josedaparte 5:c047b49f74e7 304 if(i == 4 && j == 0) { //pasa la hora al reloj
josedaparte 5:c047b49f74e7 305 horain = (hh1 * 10) + hh0;
josedaparte 5:c047b49f74e7 306 minin = (mm1 * 10) + mm0;
josedaparte 5:c047b49f74e7 307 hh0 = hh1 = mm1 = mm0 = 0;
josedaparte 5:c047b49f74e7 308 lcd.locate(0,0);
josedaparte 5:c047b49f74e7 309 lcd.printf("horario ");
josedaparte 5:c047b49f74e7 310 lcd.locate(0,1);
josedaparte 5:c047b49f74e7 311 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 5:c047b49f74e7 312 i = 0;
josedaparte 5:c047b49f74e7 313 j = 1;
josedaparte 5:c047b49f74e7 314 }
josedaparte 5:c047b49f74e7 315 if(i == 4 && j == 1) { //pasa la hora al reloj
josedaparte 5:c047b49f74e7 316 horafin = (hh1 * 10) + hh0;
josedaparte 5:c047b49f74e7 317 minfin = (mm1 * 10) + mm0;
josedaparte 5:c047b49f74e7 318 hh0 = hh1 = mm1 = mm0 = 0;
josedaparte 5:c047b49f74e7 319 lcd.locate(0,0);
josedaparte 5:c047b49f74e7 320 lcd.printf("horario ");
josedaparte 5:c047b49f74e7 321 lcd.locate(0,1);
josedaparte 5:c047b49f74e7 322 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 5:c047b49f74e7 323 i = 0;
josedaparte 5:c047b49f74e7 324 j = 0;
josedaparte 5:c047b49f74e7 325 }
josedaparte 2:a3cc9101e1c3 326 break;
josedaparte 4:96c3f113f0b0 327 case 5: //set temperatura manual
josedaparte 2:a3cc9101e1c3 328 if(i == 0) {
josedaparte 2:a3cc9101e1c3 329 pdig = num;
josedaparte 2:a3cc9101e1c3 330 } else if(i == 1) {
josedaparte 2:a3cc9101e1c3 331 sdig = num;
josedaparte 5:c047b49f74e7 332 tempmanual = (pdig * 10) + sdig;
josedaparte 8:5cfa4b38ddf1 333 if(tempmanual >= 65) {
josedaparte 9:364316a55827 334 tempmanual = 65;
josedaparte 9:364316a55827 335 }
josedaparte 9:364316a55827 336 if(tempmanual <= 25) {
josedaparte 9:364316a55827 337 tempmanual = 25;
josedaparte 9:364316a55827 338 }
josedaparte 3:ef1eaeaf5c4e 339 imprimehora();
josedaparte 3:ef1eaeaf5c4e 340 lcd.locate(0,0);
josedaparte 5:c047b49f74e7 341 lcd.printf("temperatura a %d",tempmanual);
josedaparte 3:ef1eaeaf5c4e 342 wait(1);
josedaparte 3:ef1eaeaf5c4e 343 lcd.locate(0,0);
josedaparte 3:ef1eaeaf5c4e 344 lcd.printf("temperatura ");
josedaparte 2:a3cc9101e1c3 345 }
josedaparte 2:a3cc9101e1c3 346 i++;
josedaparte 2:a3cc9101e1c3 347 if(i == 2) {
josedaparte 2:a3cc9101e1c3 348 i = 0;
josedaparte 2:a3cc9101e1c3 349 }
josedaparte 2:a3cc9101e1c3 350 break;
josedaparte 4:96c3f113f0b0 351 case 6: //tipo de banio manual
josedaparte 2:a3cc9101e1c3 352 if(num == 0 || num == 1) {
josedaparte 2:a3cc9101e1c3 353 tipobanio = num;
josedaparte 2:a3cc9101e1c3 354 lcd.locate(0,0);
josedaparte 2:a3cc9101e1c3 355 if(num == 0)
josedaparte 3:ef1eaeaf5c4e 356 lcd.printf("banio rapido ");
josedaparte 2:a3cc9101e1c3 357 else
josedaparte 3:ef1eaeaf5c4e 358 lcd.printf("banio normal ");
josedaparte 2:a3cc9101e1c3 359 wait(1);
josedaparte 2:a3cc9101e1c3 360 lcd.cls();
josedaparte 3:ef1eaeaf5c4e 361 lcd.printf("tipo banio ");
josedaparte 2:a3cc9101e1c3 362 set = 0;
josedaparte 2:a3cc9101e1c3 363 } else {
josedaparte 2:a3cc9101e1c3 364 lcd.locate(0,0);
josedaparte 2:a3cc9101e1c3 365 lcd.printf("valor invalido");
josedaparte 2:a3cc9101e1c3 366 wait(1);
josedaparte 2:a3cc9101e1c3 367 lcd.cls();
josedaparte 3:ef1eaeaf5c4e 368 lcd.printf("tipo banio ");
josedaparte 2:a3cc9101e1c3 369 }
josedaparte 2:a3cc9101e1c3 370 break;
josedaparte 2:a3cc9101e1c3 371 }
josedaparte 2:a3cc9101e1c3 372 }
josedaparte 2:a3cc9101e1c3 373 }
josedaparte 2:a3cc9101e1c3 374
josedaparte 5:c047b49f74e7 375 //impresion de menu
josedaparte 2:a3cc9101e1c3 376 void menu ()
josedaparte 2:a3cc9101e1c3 377 {
josedaparte 0:1334d6f26f42 378 lcd.cls();
josedaparte 5:c047b49f74e7 379 imprimehora();
josedaparte 2:a3cc9101e1c3 380 switch (sel) {
josedaparte 2:a3cc9101e1c3 381 case 1:
josedaparte 0:1334d6f26f42 382 lcd.locate(0,0);
josedaparte 0:1334d6f26f42 383 lcd.printf("auto");
josedaparte 0:1334d6f26f42 384 lcd.locate(0,1);
josedaparte 3:ef1eaeaf5c4e 385 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 0:1334d6f26f42 386 sel = 2;
josedaparte 0:1334d6f26f42 387 break;
josedaparte 0:1334d6f26f42 388 case 2:
josedaparte 0:1334d6f26f42 389 lcd.locate(0,0);
josedaparte 0:1334d6f26f42 390 lcd.printf("manual");
josedaparte 0:1334d6f26f42 391 lcd.locate(0,1);
josedaparte 3:ef1eaeaf5c4e 392 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 0:1334d6f26f42 393 sel = 3;
josedaparte 0:1334d6f26f42 394 break;
josedaparte 2:a3cc9101e1c3 395 case 3:
josedaparte 0:1334d6f26f42 396 lcd.locate(0,0);
josedaparte 0:1334d6f26f42 397 lcd.printf("reloj");
josedaparte 0:1334d6f26f42 398 lcd.locate(0,1);
josedaparte 3:ef1eaeaf5c4e 399 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 0:1334d6f26f42 400 sel = 1;
josedaparte 0:1334d6f26f42 401 break;
josedaparte 2:a3cc9101e1c3 402 case 4:
josedaparte 0:1334d6f26f42 403 lcd.locate(0,0);
josedaparte 0:1334d6f26f42 404 lcd.printf("temperatura");
josedaparte 0:1334d6f26f42 405 lcd.locate(0,1);
josedaparte 3:ef1eaeaf5c4e 406 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 0:1334d6f26f42 407 sel = 5;
josedaparte 0:1334d6f26f42 408 break;
josedaparte 0:1334d6f26f42 409 case 5:
josedaparte 0:1334d6f26f42 410 lcd.locate(0,0);
josedaparte 3:ef1eaeaf5c4e 411 lcd.printf("tipo banio ");
josedaparte 0:1334d6f26f42 412 lcd.locate(0,1);
josedaparte 3:ef1eaeaf5c4e 413 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 0:1334d6f26f42 414 sel = 6;
josedaparte 0:1334d6f26f42 415 break;
josedaparte 2:a3cc9101e1c3 416 case 6:
josedaparte 0:1334d6f26f42 417 lcd.locate(0,0);
josedaparte 0:1334d6f26f42 418 lcd.printf("horarios");
josedaparte 0:1334d6f26f42 419 lcd.locate(0,1);
josedaparte 3:ef1eaeaf5c4e 420 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 0:1334d6f26f42 421 sel = 9;
josedaparte 0:1334d6f26f42 422 break;
josedaparte 2:a3cc9101e1c3 423 case 7:
josedaparte 0:1334d6f26f42 424 lcd.locate(0,0);
josedaparte 0:1334d6f26f42 425 lcd.printf("temperatura");
josedaparte 0:1334d6f26f42 426 lcd.locate(0,1);
josedaparte 3:ef1eaeaf5c4e 427 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 0:1334d6f26f42 428 sel = 8;
josedaparte 0:1334d6f26f42 429 break;
josedaparte 2:a3cc9101e1c3 430 case 8:
josedaparte 0:1334d6f26f42 431 lcd.locate(0,0);
josedaparte 3:ef1eaeaf5c4e 432 lcd.printf("tipo banio ");
josedaparte 0:1334d6f26f42 433 lcd.locate(0,1);
josedaparte 3:ef1eaeaf5c4e 434 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 0:1334d6f26f42 435 sel = 10;
josedaparte 0:1334d6f26f42 436 break;
josedaparte 2:a3cc9101e1c3 437 case 9:
josedaparte 0:1334d6f26f42 438 lcd.locate(0,0);
josedaparte 0:1334d6f26f42 439 lcd.printf("salir");
josedaparte 0:1334d6f26f42 440 lcd.locate(0,1);
josedaparte 3:ef1eaeaf5c4e 441 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 0:1334d6f26f42 442 sel = 4;
josedaparte 0:1334d6f26f42 443 break;
josedaparte 0:1334d6f26f42 444 case 10:
josedaparte 0:1334d6f26f42 445 lcd.locate(0,0);
josedaparte 0:1334d6f26f42 446 lcd.printf("salir");
josedaparte 0:1334d6f26f42 447 lcd.locate(0,1);
josedaparte 3:ef1eaeaf5c4e 448 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 0:1334d6f26f42 449 sel = 7;
josedaparte 2:a3cc9101e1c3 450 break;
josedaparte 2:a3cc9101e1c3 451 }
josedaparte 0:1334d6f26f42 452 }
josedaparte 0:1334d6f26f42 453
josedaparte 2:a3cc9101e1c3 454 void selec()
josedaparte 2:a3cc9101e1c3 455 {
josedaparte 2:a3cc9101e1c3 456 switch (sel) {
josedaparte 0:1334d6f26f42 457 case 2:
josedaparte 2:a3cc9101e1c3 458 modo = 'A';
josedaparte 0:1334d6f26f42 459 sel = 4;
josedaparte 0:1334d6f26f42 460 menu();
josedaparte 0:1334d6f26f42 461 break;
josedaparte 0:1334d6f26f42 462 case 3:
josedaparte 0:1334d6f26f42 463 modo = 'M';
josedaparte 0:1334d6f26f42 464 sel = 7;
josedaparte 0:1334d6f26f42 465 menu();
josedaparte 0:1334d6f26f42 466 break;
josedaparte 0:1334d6f26f42 467 case 1:
josedaparte 2:a3cc9101e1c3 468 set = 1;
josedaparte 0:1334d6f26f42 469 break;
josedaparte 0:1334d6f26f42 470 case 5:
josedaparte 3:ef1eaeaf5c4e 471 lcd.locate(0,0);
josedaparte 3:ef1eaeaf5c4e 472 lcd.printf(" 0_F 1_N 2_C");
josedaparte 2:a3cc9101e1c3 473 set = 2;
josedaparte 0:1334d6f26f42 474 break;
josedaparte 0:1334d6f26f42 475 case 6:
josedaparte 3:ef1eaeaf5c4e 476 lcd.locate(0,0);
josedaparte 2:a3cc9101e1c3 477 lcd.printf(" 0_rap 1_norm");
josedaparte 2:a3cc9101e1c3 478 set = 3;
josedaparte 0:1334d6f26f42 479 break;
josedaparte 0:1334d6f26f42 480 case 4:
josedaparte 0:1334d6f26f42 481 sel = 1;
josedaparte 5:c047b49f74e7 482 menu(); //salida1
josedaparte 0:1334d6f26f42 483 break;
josedaparte 0:1334d6f26f42 484 case 8:
josedaparte 3:ef1eaeaf5c4e 485 lcd.locate(0,0);
josedaparte 3:ef1eaeaf5c4e 486 lcd.printf("ingrese temperat");
josedaparte 2:a3cc9101e1c3 487 set = 5;
josedaparte 0:1334d6f26f42 488 break;
josedaparte 0:1334d6f26f42 489 case 7:
josedaparte 0:1334d6f26f42 490 sel = 2;
josedaparte 0:1334d6f26f42 491 menu();
josedaparte 0:1334d6f26f42 492 break;
josedaparte 0:1334d6f26f42 493 case 9:
josedaparte 2:a3cc9101e1c3 494 set = 4;
josedaparte 0:1334d6f26f42 495 break;
josedaparte 0:1334d6f26f42 496 case 10:
josedaparte 3:ef1eaeaf5c4e 497 lcd.locate(0,0);
josedaparte 2:a3cc9101e1c3 498 lcd.printf(" 0_rap 1_norm");
josedaparte 2:a3cc9101e1c3 499 set = 6;
josedaparte 0:1334d6f26f42 500 break;
josedaparte 0:1334d6f26f42 501 }
josedaparte 2:a3cc9101e1c3 502 }
josedaparte 2:a3cc9101e1c3 503
josedaparte 5:c047b49f74e7 504 //programa principal
josedaparte 2:a3cc9101e1c3 505 int main()
josedaparte 2:a3cc9101e1c3 506 {
josedaparte 3:ef1eaeaf5c4e 507 t.start();
josedaparte 0:1334d6f26f42 508 pc.baud(115200);
josedaparte 1:9ab0f526b7a7 509 Enable.rise(&func);
josedaparte 6:eb50c82e7d93 510
josedaparte 2:a3cc9101e1c3 511 while(1) {
josedaparte 8:5cfa4b38ddf1 512 modotemp();
josedaparte 3:ef1eaeaf5c4e 513 //reloj
josedaparte 5:c047b49f74e7 514 seg = t.read();
josedaparte 5:c047b49f74e7 515 if(seg == 60) {
josedaparte 3:ef1eaeaf5c4e 516 seg=0;
josedaparte 3:ef1eaeaf5c4e 517 t.reset();
josedaparte 5:c047b49f74e7 518 min++;
josedaparte 3:ef1eaeaf5c4e 519 }
josedaparte 5:c047b49f74e7 520 if(min==60) {
josedaparte 3:ef1eaeaf5c4e 521 min=0;
josedaparte 5:c047b49f74e7 522 hora++;
josedaparte 5:c047b49f74e7 523 }
josedaparte 5:c047b49f74e7 524 if(hora==24) {
josedaparte 5:c047b49f74e7 525 hora=0;
josedaparte 3:ef1eaeaf5c4e 526 }
josedaparte 5:c047b49f74e7 527 imprimehora();
josedaparte 8:5cfa4b38ddf1 528
josedaparte 2:a3cc9101e1c3 529 //convierte voltaje a temperatura
josedaparte 0:1334d6f26f42 530 casexterno = externo.read() * 3.3;
josedaparte 2:a3cc9101e1c3 531 texterno = (casexterno + 0.2) * 100 / 5;
josedaparte 0:1334d6f26f42 532 casinterno = interno.read() * 3.3;
josedaparte 0:1334d6f26f42 533 tinterno = (casinterno + 2) * 100 / 8;
josedaparte 2:a3cc9101e1c3 534
josedaparte 0:1334d6f26f42 535 lcd.locate(0,1);
josedaparte 3:ef1eaeaf5c4e 536 lcd.printf("%.0fC %.0fC %c ", texterno, tinterno, modo);
josedaparte 8:5cfa4b38ddf1 537 pwm();
josedaparte 9:364316a55827 538 funpresion();
josedaparte 2:a3cc9101e1c3 539 wait(1);
josedaparte 8:5cfa4b38ddf1 540 } //fin wile
josedaparte 0:1334d6f26f42 541 }