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); } } }