Codigo para el control del flujo de una lavadora para luego llenar el tanque de un baño teniendo en cuenta el nivel de este y si hay o no flujo de la lavadora

Dependencies:   DebouncedIn PinDetect Pulse mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include <Pulse.h>
00003 #include "DebouncedIn.h"
00004 #define off 1
00005 #define on 0
00006 
00007 Serial pc(USBTX,USBRX); // Abre puerto serial
00008 Serial GSM(PTE0,PTE1);
00009 
00010 DigitalOut LedVerde(LED2,off);
00011 DigitalOut LedRojo(LED1,off);
00012 
00013 AnalogIn input(PTC2);
00014 InterruptIn sw2(PTA13);
00015 
00016 Timer t;  //Configura el timer
00017 
00018 int tiempo;
00019 int cPulsos; // Cuenta los pulsos
00020 int Bmax = 1; // Límite de agua máximo del recipiente de la bomba
00021 int i, j, k, m, num;
00022 bool saver = true; // Para terminar el programa.
00023 
00024 void sw2_release(void)  //esta me dispara el timer iniciando en 0.0000
00025 {
00026     t.reset();
00027     t.start();
00028     i=0;                 //note que si i=0 es por que se dio pulso completo
00029 }    
00030  
00031 void sw2_pull(void)  //esta detiene el timer (primero) y luego lee el valor en microsegundos, con tiempo en valor entero
00032 {
00033     t.stop();
00034     tiempo=t.read_us();
00035     
00036 }
00037 
00038 void sendData(float input)
00039 {
00040     wait(1);
00041     num = input*1000;      //agrando el numero de cero a mil
00042     GSM.putc(num);
00043     pc.printf("Nivel del tanque: %f [m].\r\n", input);
00044     if(num < 256) {          //debo generar dos casos a APP inventor solo me recibe hex asi: 0xhhhh (4 cifras)
00045         GSM.putc(0);     //si el numero es hasta 255 se le ponen dos ceros adelante a la secuencia de bits
00046         GSM.putc(i);     //luego la cifra menos significativa
00047         //pc.printf("Cero: %d\r\n", 0);
00048         //pc.printf("m: %d\r\n", m);
00049     }
00050     if(num >255) {         //pero si es mayor a 255 las cifras deben ser convertidas a un hex de dos bytes de la siguiente forma
00051         j = num/256;       //calculo la cifra mas significativa
00052         k = num - j*256;     //calculo la cifra menos significativa
00053         GSM.putc(j);   //las envio a la usart para que se las ponga al modulo bluetooth y la lleve al android
00054         GSM.putc(k);   //mas significativa primero, menos despues si no no funciona!!! y con la orden PUTC solo asi le envia binarios
00055         //pc.printf("j: %d\r\n", j);
00056         //pc.printf("k: %d\r\n", k);
00057     }
00058 }
00059 
00060 
00061 int main()
00062 {
00063     GSM.baud(9600);   // asigno baudios y configuro puerto serie de la usart
00064     GSM.format(8,Serial::None,1);
00065     wait(1);
00066     pc.printf(" Iniciando WaterSaver\r\n");
00067  
00068     // Inicia el ciclo
00069     while(saver) {
00070 waitPulse: // en esta parte se identifican los tiempo de los pulsos
00071 
00072           sw2.fall(&sw2_release);
00073           sw2.rise(&sw2_pull);
00074           wait(0.5);
00075           pc.printf("tiempo = %i\r\n",tiempo); 
00076           pc.printf("Esperando flujo de la lavadora...\r\n");
00077             if ((5000<=tiempo)) {
00078                 goto comenzar;
00079             } else {
00080         goto waitPulse;
00081         }
00082 comenzar:
00083           sw2.fall(&sw2_release);
00084           sw2.rise(&sw2_pull);
00085           pc.printf("tiempo = %i\r\n",tiempo); 
00086         if(tiempo<5000) {
00087             goto waitPulse;
00088         } else {
00089             cPulsos = 0;
00090             pc.printf("\r\n");
00091             pc.printf("Se detecta flujo.\r\n");
00092             LedVerde = on;
00093             goto llenar;
00094         }
00095 
00096 llenar: // envia flujo a donde se encuentra la bomba para desplazar el agua al tanque principal
00097         int j = 0;
00098         while(j <= Bmax) { // Ciclo de en envio de fluido a la bomba principal
00099         
00100             if(j == Bmax) {
00101                 pc.printf("Se debe prender la bomba.\r\n");
00102                 goto Tanque;
00103             } else {
00104                 pc.printf("Enviando flujo\r\n");
00105                 wait(1);
00106             }
00107             j++;
00108         }
00109 
00110 Tanque:
00111         float limax = 1;
00112         for(float l = 0; l <= limax; l += 0.033333333) {
00113             sw2.fall(&sw2_release); 
00114           sw2.rise(&sw2_pull);
00115           pc.printf("tiempo = %i\r\n",tiempo); 
00116         if(tiempo<5000) {
00117             goto waitPulse;
00118         }         
00119             
00120             
00121             if (l == limax) { // Significa que se ha llenado el tanque y se debe alertar.
00122                 pc.printf("Se ha llenado el tanque. Favor abrir la valvula del desague.\r\n");
00123                 goto desague;
00124             } else {
00125                 sendData(l); // Enviar dato a la aplicación de llenado de tanque
00126             }
00127         }
00128 
00129 
00130 desague:
00131         LedRojo = on;
00132         wait(1);
00133         LedRojo = off;
00134         wait(1);
00135 
00136 pc.printf("tiempo = %i\r\n",tiempo); 
00137 
00138         pc.printf("presione 'v' para abrir la valvula del tanque: ");
00139         char c = pc.getc();
00140         //char c = 'a'; // Agilidad
00141         pc.printf("\r\n");
00142         pc.printf("Se inicia la descarga del tanque. \r\n");
00143 
00144         LedRojo = on;
00145                
00146         if(c == 'v') {
00147             float limTmin = 0;
00148             for(float l1 = 1; l1 >= limTmin; l1 -= 0.033333333) {
00149                 if (l1 == 0) { // Significa que se ha llenado el tanque y se debe alertar.
00150                     pc.printf("Se ha liberado el tanque. Comprobando flujo...\r\n");
00151                     wait(1);
00152                     goto llenar;
00153                 } else {
00154                     sendData(l1); // Enviar dato a la aplicación de llenado de tanque
00155                 }
00156             }
00157         }
00158     }
00159 }
00160 
00161