gabriel jaime useche ossa / Mbed 2 deprecated Tarea_Control_Remoto

Dependencies:   Pulse1 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include <Pulse1.h>
00003 
00004 //control remoto SAMSUNG
00005 PulseInOut irda(PTD7);// en este puerto se pone el sensor infrarrojo
00006 Serial pc(USBTX, USBRX);
00007 DigitalOut ab(PTD0);
00008 DigitalOut ce(PTD1);
00009 
00010 int header =0; //tiempo de cabecera pulso abajo
00011 const int head_H = 4972; //+10% medida con osciloscopio en microsegundos
00012 const int head_L = 4068;//-10%  medida con osciloscopio
00013 int i=0;
00014 const int T_alto = 1680;//ponga su tiempo de la prueba
00015 const int T_bajo = 640;//ponga su tiempo de la prueba
00016 const int num_bits = 32;//ponga su numero de bits
00017 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
00018 int dato; // tiempo de cada dato que se lee
00019 char v[num_bits]; // vector usado para guardar los datos del boton que se aprete
00020 char vi[num_bits]= {1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1}; // Codigo del boton ON, el cual se usara para encender o apagar la valvula
00021 int con; // Variable auxiliar
00022  
00023 int main(){
00024 while(1){
00025 ini1: fflush( stdin );
00026     header=0;
00027     header = irda.read_low_us();    //funcion para leer un pulso de caida o bajo en header
00028         if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-10%
00029         else goto ini1;
00030       
00031 seguir:
00032     //leo los datos de la trama y se meten a un arreglo
00033     wait_us(4480);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO 
00034         for(i=0;i<(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
00035             dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control
00036             num[i]=dato;
00037             wait_us(300);   ////////////
00038         }
00039     wait(0.5); //espero un poquito luego de leer todo el arreglo y ponerlo en pantalla 
00040     pc.printf("\n\n");
00041         for(i=0;i<(num_bits-1);++i){  
00042             if(num[i] > ((T_alto+T_bajo)/2)){
00043                 pc.printf("1");
00044                 v[i]=1; // Guarda 1 en las posiciones del vector donde el pulso es alto
00045             }
00046             else {
00047                 pc.printf("0");
00048                 v[i]=0; // Guarda 0 en las posiciones del vector donde el pulso es bajo            
00049             }
00050         }
00051    con=0;
00052     for (i=0; i<(num_bits-1);++i){ 
00053         if (vi[i]==v[i]){ // Comparación de los codigos
00054             con=con+1; // Si la posición de los vectores es igual aumenta el contador
00055         }
00056     }        
00057         if (con==(num_bits-1)){ // Si el contador es igual al numero de bits, indica que la cadena es correcta
00058             ab=1;
00059             ce=0;
00060             pc.printf("\nAbriendo valvula\n");
00061             wait(6);
00062             ab=0;
00063             ce=1;
00064             pc.printf("Cerrando valvula\n");  
00065             wait(2);
00066             ab=0;
00067             ce=0;
00068                   
00069         }
00070         else{ // Si el contador es diferente, la cadena es incorrecta
00071             ab=0;
00072             ce=0;
00073             pc.printf("\nTecla equivocada");            
00074         }      
00075 }
00076 }