Bomba sin recierres
Dependencies: DebouncedIn PinDetect Pulse mbed
main.cpp@0:2fd9acdd9076, 2016-05-23 (annotated)
- Committer:
- sago104
- Date:
- Mon May 23 20:07:21 2016 +0000
- Revision:
- 0:2fd9acdd9076
- Child:
- 1:8171657a1bcb
First version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sago104 | 0:2fd9acdd9076 | 1 | #include "mbed.h" |
sago104 | 0:2fd9acdd9076 | 2 | #include <Pulse.h> |
sago104 | 0:2fd9acdd9076 | 3 | #include "DebouncedIn.h" |
sago104 | 0:2fd9acdd9076 | 4 | #define off 1 |
sago104 | 0:2fd9acdd9076 | 5 | #define on 0 |
sago104 | 0:2fd9acdd9076 | 6 | |
sago104 | 0:2fd9acdd9076 | 7 | Serial pc(USBTX,USBRX); // Abre puerto serial |
sago104 | 0:2fd9acdd9076 | 8 | Serial GSM(PTE0,PTE1); |
sago104 | 0:2fd9acdd9076 | 9 | |
sago104 | 0:2fd9acdd9076 | 10 | DigitalOut LedVerde(LED2,off); |
sago104 | 0:2fd9acdd9076 | 11 | DigitalOut LedRojo(LED1,off); |
sago104 | 0:2fd9acdd9076 | 12 | DigitalOut LedAzul(LED3,off); |
sago104 | 0:2fd9acdd9076 | 13 | DigitalOut bomba(PTA17); // Pin para activar la bomba |
sago104 | 0:2fd9acdd9076 | 14 | PulseInOut pulseIn(PTD4); // Generamos los pulsos |
sago104 | 0:2fd9acdd9076 | 15 | |
sago104 | 0:2fd9acdd9076 | 16 | DebouncedIn levelBalde(PTC17); // Sensor de nivel del balde |
sago104 | 0:2fd9acdd9076 | 17 | DebouncedIn levelTanque(PTC16); // Sensor de nivel en el tanque de almacenamiento |
sago104 | 0:2fd9acdd9076 | 18 | AnalogIn input(PTC2); |
sago104 | 0:2fd9acdd9076 | 19 | |
sago104 | 0:2fd9acdd9076 | 20 | int cPulsos; // Cuenta los pulsos |
sago104 | 0:2fd9acdd9076 | 21 | int limBmax = 5; // Límite de agua máximo en el balde. 50 cm. |
sago104 | 0:2fd9acdd9076 | 22 | //int limBmin = 1; // Límite de agua mínimo en el balde. 10 cm |
sago104 | 0:2fd9acdd9076 | 23 | int i, j, k, m, num; |
sago104 | 0:2fd9acdd9076 | 24 | |
sago104 | 0:2fd9acdd9076 | 25 | void pulsos() // Generación de pulsos |
sago104 | 0:2fd9acdd9076 | 26 | { |
sago104 | 0:2fd9acdd9076 | 27 | pulseIn.write_us(0, 3000000); // 3 segundos tiempo bajo |
sago104 | 0:2fd9acdd9076 | 28 | cPulsos++; // Cuenta cuando hay un flanco de bajada |
sago104 | 0:2fd9acdd9076 | 29 | pulseIn.write_us(1, 1000000); // 1 segundo arriba |
sago104 | 0:2fd9acdd9076 | 30 | } |
sago104 | 0:2fd9acdd9076 | 31 | |
sago104 | 0:2fd9acdd9076 | 32 | void sendData(float input){ |
sago104 | 0:2fd9acdd9076 | 33 | wait(1); |
sago104 | 0:2fd9acdd9076 | 34 | num = input*1000; //agrando el numero de cero a mil |
sago104 | 0:2fd9acdd9076 | 35 | GSM.putc(num); |
sago104 | 0:2fd9acdd9076 | 36 | pc.printf("num %d,data %f \r\n", num, input); |
sago104 | 0:2fd9acdd9076 | 37 | if(num < 256){ //debo generar dos casos a APP inventor solo me recibe hex asi: 0xhhhh (4 cifras) |
sago104 | 0:2fd9acdd9076 | 38 | GSM.putc(0); //si el numero es hasta 255 se le ponen dos ceros adelante a la secuencia de bits |
sago104 | 0:2fd9acdd9076 | 39 | GSM.putc(i); //luego la cifra menos significativa |
sago104 | 0:2fd9acdd9076 | 40 | pc.printf("Cero: %d\r\n", 0); |
sago104 | 0:2fd9acdd9076 | 41 | pc.printf("m: %d\r\n", m); |
sago104 | 0:2fd9acdd9076 | 42 | } |
sago104 | 0:2fd9acdd9076 | 43 | if(num >255){ //pero si es mayor a 255 las cifras deben ser convertidas a un hex de dos bytes de la siguiente forma |
sago104 | 0:2fd9acdd9076 | 44 | j = num/256; //calculo la cifra mas significativa |
sago104 | 0:2fd9acdd9076 | 45 | k = num - j*256; //calculo la cifra menos significativa |
sago104 | 0:2fd9acdd9076 | 46 | GSM.putc(j); //las envio a la usart para que se las ponga al modulo bluetooth y la lleve al android |
sago104 | 0:2fd9acdd9076 | 47 | GSM.putc(k); //mas significativa primero, menos despues si no no funciona!!! y con la orden PUTC solo asi le envia binarios |
sago104 | 0:2fd9acdd9076 | 48 | pc.printf("j: %d\r\n", j); |
sago104 | 0:2fd9acdd9076 | 49 | pc.printf("k: %d\r\n", k); |
sago104 | 0:2fd9acdd9076 | 50 | } |
sago104 | 0:2fd9acdd9076 | 51 | } |
sago104 | 0:2fd9acdd9076 | 52 | |
sago104 | 0:2fd9acdd9076 | 53 | int main() |
sago104 | 0:2fd9acdd9076 | 54 | { |
sago104 | 0:2fd9acdd9076 | 55 | GSM.baud(9600); // asigno baudios y configuro puerto serie de la usart |
sago104 | 0:2fd9acdd9076 | 56 | GSM.format(8,Serial::None,1); |
sago104 | 0:2fd9acdd9076 | 57 | wait(1); |
sago104 | 0:2fd9acdd9076 | 58 | pc.printf("Ahorrador de agua\r\n"); |
sago104 | 0:2fd9acdd9076 | 59 | pc.printf("El programa se esta iniciando\r\n"); |
sago104 | 0:2fd9acdd9076 | 60 | wait(1); |
sago104 | 0:2fd9acdd9076 | 61 | LedVerde = on; |
sago104 | 0:2fd9acdd9076 | 62 | wait(1); |
sago104 | 0:2fd9acdd9076 | 63 | LedVerde = off; |
sago104 | 0:2fd9acdd9076 | 64 | wait(1); |
sago104 | 0:2fd9acdd9076 | 65 | LedRojo = on; |
sago104 | 0:2fd9acdd9076 | 66 | wait(1); |
sago104 | 0:2fd9acdd9076 | 67 | LedRojo = off; |
sago104 | 0:2fd9acdd9076 | 68 | wait(1); |
sago104 | 0:2fd9acdd9076 | 69 | LedAzul = on; |
sago104 | 0:2fd9acdd9076 | 70 | wait(1); |
sago104 | 0:2fd9acdd9076 | 71 | LedAzul = off; |
sago104 | 0:2fd9acdd9076 | 72 | wait(1); |
sago104 | 0:2fd9acdd9076 | 73 | |
sago104 | 0:2fd9acdd9076 | 74 | |
sago104 | 0:2fd9acdd9076 | 75 | // Inicia el ciclo |
sago104 | 0:2fd9acdd9076 | 76 | while(1) { |
sago104 | 0:2fd9acdd9076 | 77 | waitPulse: // Acá leeríamos los pulsos |
sago104 | 0:2fd9acdd9076 | 78 | for(i = 0; i <= 3; i++) { |
sago104 | 0:2fd9acdd9076 | 79 | pulsos(); |
sago104 | 0:2fd9acdd9076 | 80 | pc.printf("Esperando senal de flujo...\r\n"); |
sago104 | 0:2fd9acdd9076 | 81 | if (cPulsos == 3) { |
sago104 | 0:2fd9acdd9076 | 82 | goto seguir; |
sago104 | 0:2fd9acdd9076 | 83 | } else goto waitPulse; |
sago104 | 0:2fd9acdd9076 | 84 | } |
sago104 | 0:2fd9acdd9076 | 85 | seguir: |
sago104 | 0:2fd9acdd9076 | 86 | cPulsos = 0; |
sago104 | 0:2fd9acdd9076 | 87 | pc.printf("\r\n"); |
sago104 | 0:2fd9acdd9076 | 88 | pc.printf("El programa ha iniciado.\r\n"); |
sago104 | 0:2fd9acdd9076 | 89 | LedVerde = on; |
sago104 | 0:2fd9acdd9076 | 90 | wait(1); |
sago104 | 0:2fd9acdd9076 | 91 | LedVerde = off; |
sago104 | 0:2fd9acdd9076 | 92 | //printf("Accionamos la bomba.\n"); |
sago104 | 0:2fd9acdd9076 | 93 | //LedAzul = on; // Puede ser la bomba |
sago104 | 0:2fd9acdd9076 | 94 | goto llenarBalde; |
sago104 | 0:2fd9acdd9076 | 95 | |
sago104 | 0:2fd9acdd9076 | 96 | llenarBalde: // Llenar balde donde está la bomba |
sago104 | 0:2fd9acdd9076 | 97 | i = 0; |
sago104 | 0:2fd9acdd9076 | 98 | while(i <= limBmax) { // Ciclo para llenar el balde |
sago104 | 0:2fd9acdd9076 | 99 | if(i == limBmax) { |
sago104 | 0:2fd9acdd9076 | 100 | pc.printf("El balde de almacenamiento se ha llenado. Se inicia el bombeo.\r\n"); |
sago104 | 0:2fd9acdd9076 | 101 | goto llenarTanque; |
sago104 | 0:2fd9acdd9076 | 102 | |
sago104 | 0:2fd9acdd9076 | 103 | } else { |
sago104 | 0:2fd9acdd9076 | 104 | pc.printf("Llenando balde\r\n"); |
sago104 | 0:2fd9acdd9076 | 105 | wait(1); |
sago104 | 0:2fd9acdd9076 | 106 | i++; |
sago104 | 0:2fd9acdd9076 | 107 | } |
sago104 | 0:2fd9acdd9076 | 108 | } |
sago104 | 0:2fd9acdd9076 | 109 | |
sago104 | 0:2fd9acdd9076 | 110 | llenarTanque: |
sago104 | 0:2fd9acdd9076 | 111 | float limTmax = 1; |
sago104 | 0:2fd9acdd9076 | 112 | for(float l = 0; l <= limTmax; l += 0.016666667) { |
sago104 | 0:2fd9acdd9076 | 113 | if (l == limTmax) { // Significa que se ha llenado el tanque y se debe alertar. |
sago104 | 0:2fd9acdd9076 | 114 | pc.printf("Se ha llenado el tanque. Abra la valvula del desague.\r\n"); |
sago104 | 0:2fd9acdd9076 | 115 | goto final; |
sago104 | 0:2fd9acdd9076 | 116 | } else { |
sago104 | 0:2fd9acdd9076 | 117 | sendData(l); // Enviar dato a la aplicación de llenado de tanque |
sago104 | 0:2fd9acdd9076 | 118 | } |
sago104 | 0:2fd9acdd9076 | 119 | } |
sago104 | 0:2fd9acdd9076 | 120 | final: |
sago104 | 0:2fd9acdd9076 | 121 | pc.printf("Salir."); |
sago104 | 0:2fd9acdd9076 | 122 | while(1) { |
sago104 | 0:2fd9acdd9076 | 123 | LedRojo = on; |
sago104 | 0:2fd9acdd9076 | 124 | wait(1); |
sago104 | 0:2fd9acdd9076 | 125 | LedRojo = off; |
sago104 | 0:2fd9acdd9076 | 126 | wait(1); |
sago104 | 0:2fd9acdd9076 | 127 | } |
sago104 | 0:2fd9acdd9076 | 128 | } |
sago104 | 0:2fd9acdd9076 | 129 | } |
sago104 | 0:2fd9acdd9076 | 130 | |
sago104 | 0:2fd9acdd9076 | 131 |