PROGRAMA PARA LEER EL ANCHO DE UN PULSO QUE ENTRA POR UN PUERTO DIGITAL, USELO EN UN DATO DE TIEMPO IRDA
Fork of irda by
main.cpp
00001 #include "mbed.h" 00002 #include <Pulse1.h> 00003 00004 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo 00005 Serial pc(USBTX, USBRX); 00006 DigitalOut led(LED1); 00007 DigitalOut led2(LED2); 00008 int header =0; //tiempo de cabecera pulso abajo 00009 const int head_H = 9100; //+20% medida con osciloscopio en microsegundos 00010 const int head_L = 8500;//-20% medida con osciloscopio 00011 int i=0; 00012 const int T_alto=1680;//ponga su tiempo de la prueba 00013 const int T_bajo=526;//ponga su tiempo de la prueba 00014 const int num_bits = 32;//ponga su numero de bits 00015 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos 00016 int dato; // tiempo de cada dato que se lee 00017 00018 int main(){ 00019 while(1){ 00020 ini1: header=0; 00021 led2=1; 00022 led=1; 00023 header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo 00024 if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20% 00025 else goto ini1; 00026 00027 seguir: 00028 //leo los datos de la trama y se meten a un arreglo 00029 wait_us(5000); 00030 led2=0; 00031 for(i=0;i<(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos 00032 dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control 00033 num[i]=dato; 00034 wait_us(300); 00035 } 00036 wait(0.5); //espero un poquito antes de leer todo el arreglo y ponerlo en pantalla 00037 pc.printf(",%d",header); 00038 for(i=0;i<(num_bits-1);++i){ 00039 pc.printf(",%d",num[i]); 00040 } 00041 wait(0.1); //espero e imprimo en binario 00042 pc.printf("\n\n"); 00043 for(i=0;i<(num_bits-1);++i){ 00044 if(num[i] > ((T_alto+T_bajo)/2)) pc.printf("1"); 00045 else pc.printf("0"); 00046 } 00047 } 00048 }
Generated on Sat Jul 16 2022 02:43:02 by 1.7.2