Activación de válvula con control remoto

Dependencies:   Pulse1 mbed

/media/uploads/AaronGonzalez/20160520_071457.jpg

Files at this revision

API Documentation at this revision

Comitter:
AaronGonzalez
Date:
Fri May 20 12:38:50 2016 +0000
Commit message:
Activaci?n de v?lvula por control remoto

Changed in this revision

Pulse1.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
pulse1.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 46d20fd2b120 Pulse1.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Pulse1.lib	Fri May 20 12:38:50 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/tony63/code/Pulse1/#48651f86a80c
diff -r 000000000000 -r 46d20fd2b120 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri May 20 12:38:50 2016 +0000
@@ -0,0 +1,96 @@
+#include "mbed.h"
+#include <pulse1.h>
+#include <string.h>
+//Tarea de automatización de válvula para sanitario
+PulseInOut irda(PTD5);          // Entrada del sensor infrarojo
+Serial pc(USBTX, USBRX);        // módulos de transmisión y recepción
+PwmOut l0(PTD0);                // pin de activación de la válvula
+DigitalOut l1(LED1);
+ 
+int header =0;                  //Cabecera inicial en cero
+//Tiempo de cabecera de subida y bajada - 4520
+const int head_H = 5424;        //+20% medida con osciloscopio en microsegundos
+const int head_L = 3616;        //-20%  medida con osciloscopio
+int i=0;
+const int T_alto = 1680;        //ponga su tiempo de la prueba
+const int T_bajo = 560;         //ponga su tiempo de la prueba
+const int num_bits = 32;        //ponga su numero de bits
+int num[num_bits];              //cadena para almacenar todos los tiempos que conforman los bits de datos
+int aux[num_bits];              //Cadena auxiliar a comparar
+int dato,prender,flag1;           
+
+// Secuencia de encendido entregada por el botón POWER del control  
+int power[]={1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1};
+ 
+int main(){
+ 
+    while(1){
+ 
+ini1: 
+        fflush( stdin );                //sirve para limpiar el buffer de entrada de teclado
+        header=0;                       //cabecera inicial en cero
+        l0=0;                           //LED's apagados inicialmente
+        l1=0;                           
+        header = irda.read_low_us();    //funcion para leer un pulso de caida o bajo
+        if (header > head_L && header < head_H) goto seguir; //verificar que este en la tolerancia +-20%, si el header es mayor que el tiempo en alto, y si el header es menor que el tiempo en bajo
+        else goto ini1;                 //vuelva a la función
+ 
+seguir:
+        //leo los datos de la trama y se meten a un arreglo
+        wait_us(5000);                  //tiempo de espera 
+        for(i=0;i<(num_bits-1);++i){   // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
+            dato = irda.read_high_us();   //leer un bit de datos que es un pulso arriba en este control
+            num[i]=dato;                //asignación para construir el arreglo
+            wait_us(500);   
+        }
+        
+        wait(0.5);                      //espero antes de leer todo el arreglo y ponerlo en pantalla 
+        pc.printf(",%d",header);        //imprime en pantalla el header (pulso)
+        for(i=0;i<(num_bits-1);++i){    //Lee caracter por caracter del arreglo
+            pc.printf(",%d",num[i]);     //imprime el arreglo construido
+        }
+        
+        wait(0.1);                      //espero antes de imprimir el arreglo en binario
+        pc.printf("     \n\n     ");                //imprimo en binario
+        for(i=0;i<(num_bits-1);++i){                //Ciclo para leer los datos que llegan
+            if(num[i] >((T_alto+T_bajo)/2)){        //si el arreglo es mayor que el promedio de tiempo de las cabeceras del arreglo del botón de encendido
+                 pc.printf("1");                    //imprimo 1 en pantalla
+                 aux[i]=1;                          //Ponemos en 1 el arreglo
+            }
+            else { 
+            pc.printf("0");         //Si num[i] no cumple esta condición, se imprime 0 en pantalla
+            aux[i]=0;               //Ponemos en cero el arreglo de 32 bits
+            }
+        }
+        for(i=0;i<(num_bits-1);++i){  //Lectura de los caracteres del arreglo auxiliar
+            pc.printf("%d",aux[i]);     //imprime el arreglo auxiliar
+        }
+//Se usará una interrupción, la cual determinará si existen caracteres distintos entre las dos cadenas (encendido y cadena enviada por el control) por medio de la desactivación
+//de una bandera, si algún caracter es diferente...
+        flag1=1;                //Bandera en alto
+        for(i=0; i<31; ++i)     //Lectura de caracteres
+        {
+            if(aux[i]!=power[i]) //en caso de que un bit no coincida entre las dos cadenas
+            {
+                flag1=0;                    //Bandera en bajo
+            }   
+        }
+//Se evaluará el estado de la bandera, si está en alto es porque la cadena enviada por el control es la correspondiente al botón de encendido
+//por tanto el LED se encenderá, esta salida representa la válvula que se desea abrir por 6 segundos. De lo contrario, si la bandera está en bajo
+//la válvula no se activará, debido a que se presionó un botón diferente al de encendido.
+        if(flag1==1)            //Si la bandera está e alto...
+        {
+            fflush( stdin );        //Limpia el buffer
+            l0=1;                   //Activación de los LEDS, en el caso del LED de la placa FRDMKL25Z, cambiará de color
+            l1=1;                   
+            pc.printf("  ON");//Muestra en pantalla que se prendió        
+            wait(6);                //Duración de activación de la válvula
+        }
+        else { 
+            fflush( stdin );
+            l0=0;                   //LEDS desactivados (orden suministrada por otro botón)
+            l1=0;
+            pc.printf("   OFF");//Muestra en pantalla que se apagó
+        }
+    }
+}
diff -r 000000000000 -r 46d20fd2b120 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri May 20 12:38:50 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/aae6fcc7d9bb
\ No newline at end of file
diff -r 000000000000 -r 46d20fd2b120 pulse1.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pulse1.h	Fri May 20 12:38:50 2016 +0000
@@ -0,0 +1,53 @@
+ 
+#ifndef MBED_PULSE1_H
+#define MBED_PULSE1_H
+ 
+#include "mbed.h"
+ 
+/** Pulse Input/Output Class(es)
+ */
+ 
+class PulseInOut   {
+    public:
+        /** Create a PulseInOut object connected to the specified pin
+        * @param pin i/o pin to connect to
+        */
+        PulseInOut(PinName);
+        ~PulseInOut();
+        /** Set the value of the pin
+        * @param val Value to set, 0 for LOW, otherwise HIGH
+        */
+        void write(int val);
+        /** Send a pulse of a given value for a specified time
+        * @param val Value to set, 0 for LOW, otherwise HIGH
+        * @param time Length of pulse in microseconds
+        */
+        void write_us(int val, int time);
+        /** Return the length of the next HIGH pulse in microsconds
+        */
+        int read_high_us();
+        /** Return the length of the next HIGH pulse in microseconds or -1 if longer than timeout
+        * @param timeout Time before pulse reading aborts and returns -1, in microseconds
+        */
+        int read_high_us(int timeout);
+        /** Return the length of the next LOW pulse in microsconds
+        */
+        int read_low_us();
+        /** Return the length of the next LOW pulse in microseconds or -1 if longer than timeout
+        * @param timeout Time before pulse reading aborts and returns -1, in microseconds
+        */
+        int read_low_us(int timeout);
+        /** Return the length of the next pulse in microsconds
+        */
+        int read_us();
+        /** Return the length of the next pulse in microseconds or -1 if longer than timeout
+        * @param timeout Time before pulse reading aborts and returns -1, in microseconds
+        */
+        int read_us(int timeout);
+    private:
+        int startval;
+        Timer pulsetime, runtime;
+        DigitalInOut io;
+};
+ 
+#endif
\ No newline at end of file