Bomba sin recierres

Dependencies:   DebouncedIn PinDetect Pulse mbed

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?

UserRevisionLine numberNew 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