final

Dependencies:   TextLCD mbed

Fork of general by proyectotecnicas

Committer:
josedaparte
Date:
Fri Dec 18 18:15:16 2015 +0000
Revision:
11:260de040b9e1
Parent:
10:b76b433db252
final temp 35

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