Bomba sin recierres
Dependencies: DebouncedIn PinDetect Pulse mbed
Diff: main.cpp
- Revision:
- 0:2fd9acdd9076
- Child:
- 1:8171657a1bcb
diff -r 000000000000 -r 2fd9acdd9076 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon May 23 20:07:21 2016 +0000 @@ -0,0 +1,131 @@ +#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); + } + } +} + +