/control remoto sony disparo camara //puede convertir la trama en un entero //para cualquier tecla

Dependencies:   Pulse1 mbed

Fork of irda_V_aula by Gustavo Ramirez

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 #include "stdio.h" 
00004 #include "math.h" 
00005 //control remoto sony disparo camara
00006 //puede convertir la trama en un entero
00007 //para cualquier tecla
00008 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
00009 Serial pc(USBTX, USBRX);
00010 DigitalOut led(LED1);
00011 DigitalOut led2(LED2);
00012 int header =0; //tiempo de cabecera pulso abajo
00013 const int head_H = 2976; //+10% medida con osciloscopio en microsegundos
00014 const int head_L = 1984;//-10%  medida con osciloscopio
00015 int i=0, bin, potencia;
00016 const int T_alto=1200;//ponga su tiempo de la prueba
00017 const int T_bajo=639;//ponga su tiempo de la prueba
00018 const int num_bits = 20;//ponga su numero de bits
00019 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
00020 int dato; // tiempo de cada dato que se lee
00021 int numero;
00022 int binM[20];
00023 int bin_max[20];
00024 
00025 
00026 
00027 int main(){
00028 while(1){
00029 ini1: fflush( stdin );
00030       header=0;
00031       led2=1;
00032       led=1;
00033       header = irda.read_low_us();    //funcion para leer un pulso de caida o bajo en header
00034       if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20%
00035       else goto ini1;
00036       
00037 seguir:
00038        //leo los datos de la trama y se meten a un arreglo
00039       wait_us(400);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO 
00040       led2=1;
00041       for(i=0;i<(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
00042       dato = irda.read_low_us(); //leer un bit de datos que es pulso arriba en este control
00043       num[i]=dato;
00044       wait_us(400);   
00045       }
00046       wait(0.5); //espero un poquito luego de leer todo el arreglo y ponerlo en pantalla 
00047       //pc.printf(",%d",header);
00048       for(i=0;i<(num_bits-1);++i){  
00049       //pc.printf(",%d",num[i]);
00050       }
00051       wait(0.1);  //espero e imprimo en binario 
00052       //pc.printf("\n\n");
00053       for(i=0;i<(num_bits-1);++i){  
00054        if(num[i] > ((T_alto+T_bajo)/2)){
00055         bin_max[i]=1;
00056         }
00057        else{
00058         bin_max[i]=0;
00059           }
00060        
00061       }   
00062       binM[0]=1;
00063       for(i=1;i<(num_bits-1);++i){   
00064        binM[i]=binM[i-1]*2;
00065        
00066        }
00067      numero=0;   
00068      for(i=0;i<(num_bits-1);++i){  
00069      
00070      numero=numero+(binM[i]*bin_max[i]);
00071              
00072       }
00073       pc.printf("numero=%d",numero);
00074       if (numero==466221){
00075           led2=0;
00076           wait(4);
00077           led2=1;
00078           goto ini1;
00079           }
00080       if (numero==466231){
00081           led=0;
00082           wait(4);
00083           led=1;
00084           goto ini1;
00085           }    
00086       }
00087       }