Bomba sin recierres

Dependencies:   DebouncedIn PinDetect Pulse mbed

main.cpp

Committer:
sago104
Date:
2016-05-23
Revision:
0:2fd9acdd9076
Child:
1:8171657a1bcb

File content as of revision 0:2fd9acdd9076:

#include "mbed.h"
#include <Pulse.h>
#include "DebouncedIn.h"
#define off 1
#define on 0

Serial pc(USBTX,USBRX); // Abre puerto serial
Serial GSM(PTE0,PTE1);

DigitalOut LedVerde(LED2,off);
DigitalOut LedRojo(LED1,off);
DigitalOut LedAzul(LED3,off);
DigitalOut bomba(PTA17); // Pin para activar la bomba
PulseInOut pulseIn(PTD4); // Generamos los pulsos

DebouncedIn levelBalde(PTC17); // Sensor de nivel del balde
DebouncedIn levelTanque(PTC16); // Sensor de nivel en el tanque de almacenamiento
AnalogIn input(PTC2);

int cPulsos; // Cuenta los pulsos
int limBmax = 5; // Límite de agua máximo en el balde. 50 cm.
//int limBmin = 1; // Límite de agua mínimo en el balde. 10 cm
int i, j, k, m, num;

void pulsos() // Generación de pulsos
{
    pulseIn.write_us(0, 3000000);  // 3 segundos tiempo bajo
    cPulsos++; // Cuenta cuando hay un flanco de bajada
    pulseIn.write_us(1, 1000000); // 1 segundo arriba
}

void sendData(float input){
    wait(1);
       num = input*1000;      //agrando el numero de cero a mil
       GSM.putc(num);
       pc.printf("num %d,data %f \r\n", num, input);
       if(num < 256){           //debo generar dos casos a APP inventor solo me recibe hex asi: 0xhhhh (4 cifras)    
           GSM.putc(0);     //si el numero es hasta 255 se le ponen dos ceros adelante a la secuencia de bits
           GSM.putc(i);     //luego la cifra menos significativa
           pc.printf("Cero: %d\r\n", 0);
           pc.printf("m: %d\r\n", m);
       }
       if(num >255){          //pero si es mayor a 255 las cifras deben ser convertidas a un hex de dos bytes de la siguiente forma   
          j = num/256;       //calculo la cifra mas significativa
           k = num - j*256;     //calculo la cifra menos significativa
           GSM.putc(j);   //las envio a la usart para que se las ponga al modulo bluetooth y la lleve al android
           GSM.putc(k);   //mas significativa primero, menos despues si no no funciona!!! y con la orden PUTC solo asi le envia binarios
           pc.printf("j: %d\r\n", j);
           pc.printf("k: %d\r\n", k);
       }
    }

int main()
{
    GSM.baud(9600);   // asigno baudios y configuro puerto serie de la usart
    GSM.format(8,Serial::None,1);
    wait(1);
    pc.printf("Ahorrador de agua\r\n");
    pc.printf("El programa se esta iniciando\r\n");
    wait(1);
    LedVerde = on;
    wait(1);
    LedVerde = off;
    wait(1);
    LedRojo = on;
    wait(1);
    LedRojo = off;
    wait(1);
    LedAzul = on;
    wait(1);
    LedAzul = off;
    wait(1);


    // Inicia el ciclo
    while(1) {
waitPulse: // Acá leeríamos los pulsos
        for(i = 0; i <= 3; i++) {
            pulsos();
            pc.printf("Esperando senal de flujo...\r\n");
            if (cPulsos == 3) {
                goto seguir;
            } else goto waitPulse;
        }
seguir:
        cPulsos = 0;
        pc.printf("\r\n");
        pc.printf("El programa ha iniciado.\r\n");
        LedVerde = on;
        wait(1);
        LedVerde = off;
        //printf("Accionamos la bomba.\n");
        //LedAzul = on; // Puede ser la bomba
        goto llenarBalde;

llenarBalde: // Llenar balde donde está la bomba
        i = 0;
        while(i <= limBmax) { // Ciclo para llenar el balde
            if(i == limBmax) {
                pc.printf("El balde de almacenamiento se ha llenado. Se inicia el bombeo.\r\n");
                goto llenarTanque;
                
            } else {
                pc.printf("Llenando balde\r\n");
                wait(1);
                i++;
            }
        }

llenarTanque:
        float limTmax = 1;
        for(float l = 0; l <= limTmax; l += 0.016666667) {
            if (l == limTmax) { // Significa que se ha llenado el tanque y se debe alertar.
                pc.printf("Se ha llenado el tanque. Abra la valvula del desague.\r\n");
                goto final;
            } else {
                sendData(l); // Enviar dato a la aplicación de llenado de tanque
            }
        }
final:
        pc.printf("Salir.");
        while(1) {
            LedRojo = on;
            wait(1);
            LedRojo = off;
            wait(1);
        }
    }
}