es una versión mejorada que no requiere suiche y da mas informacion. Da indicaciones si no captura la trama completa indicando que no sale un tiempo enorme al final. y el inicio se determina despues de registrar el Header alto
main.cpp
- Committer:
- tony63
- Date:
- 2019-06-25
- Revision:
- 3:a63a363d9b95
- Parent:
- 2:d189b5862909
File content as of revision 3:a63a363d9b95:
//PROGAMA PARA CARACTERIZAR CONTROLES REMOTOS INFRARROJOS //AUN NO DETECTA NUMERO DE BITS, USTED DEBE ADAPATAR EL PROGRANAMA PARA ESO //ESTA VERSION PROPORCIONA EL VECTOR DE LA TECLA PULSADA EN EL SEGUNDO MODO O CON EL SUICHE EN BAJO //PARA MANDOS DE 31 BITS QUE EN CASO DE SER INCOSTISTENTES SE PUEDEN MODIFICAR //entrega las dos cabeceras alta y baja segun el modo #include "mbed.h" #include <Pulse1.h> PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo Serial pc(USBTX, USBRX); DigitalOut ledA (LED1); DigitalOut ledR (LED2); DigitalOut ledV (LED3); int numN[45];//cadena para almacenar todos los tiempos que conforman los bits de datos bajos int numP[45];//cadena para almacenar todos los tiempos que conforman los bits de datos altos int bin[45];//cadena para almacenar todos los tiempos que conforman los bits de datos solo tiempos en uS int dato; // tiempo de cada dato que se lee tiempo instantaneo int pul_low; // pulso bajo int i,j,k,proL,proH; int header=0;//cabeceras int r; int mode=1;//moddo de lectura int code; int numb=44;//numero de bits de la cadena //*********************************************************************************************************** int main(){ ledR=1; ledA=1; ledV=0; //prendo led verde............................. wait(3); //espero 3 segundos pc.printf("\n"); pc.printf("este codigo es para 32 bits de datos"); pc.printf("\n"); pc.printf("Al final de esta prueba pise reset para otro codigo"); pc.printf("\n"); fflush( stdin );//limpio buffer de datos usart lop1: if(mode){ //si el modo es 1 header = irda.read_low_us();//pregunto por un pulso bajo de mas de 3000 debe ser un header if(header>3000) goto seguir1; goto lop1;//repito } lop2: if(!mode){ header = irda.read_high_us(); if(header>3000) goto seguir2; goto lop2; } seguir1: ledV=1; ledA=0; for(i=0;i<numb;++i){ numN[i] = irda.read_low_us(); //funcion para leer un pulso bajo wait_us(300);//espera sugerida } pc.printf("Estos de abajo son los pulsos bajos \n"); for(i=0;i<numb;++i){ pc.printf("%d,",numN[i]); } pc.printf("\n"); pc.printf("HeaderL=%d \n",header," uS"); header=0; for(i=0;i<numb;++i){//los sumo a todos son de espera proL=numN[i]+proL; } pc.printf("\n"); pc.printf("prom_bajos=%d", proL/numb); pc.printf("\n"); pc.printf("Si el promedio bajos es mas grande de lo normal, baje en numb en el codigo y recompile"); for(i=0;i<numb;++i){ numN[i] = 0; //limpiar arreglo } header=0; proL=0; pc.printf("\n"); pc.printf("dispare de nuevo para altos"); mode=!mode;//cambio de modo ahora es modo cero.. pc.printf("\n"); header=0; goto lop2; seguir2: ledA=1; ledR=0;//prendo led verde pc.printf("Estos de abajo son los pulsos Altos \n"); for(i=0;i<numb;++i){ numP[i] = irda.read_high_us(); //funcion para leer un pulso alto wait_us(300); } for(i=0;i<numb;++i){ pc.printf("%d,",numP[i]); } pc.printf("\n"); pc.printf("copie esta cadena de arriba en su programa"); pc.printf("\n"); pc.printf("HeadeH=%d \n",header," uS"); header=0; for(i=0;i<numb;++i){ numP[i] = 0; //limpiar arreglo } ledR=1;//apago todos los leds ledA=1; ledV=1; while(1)//de forma infinita oscila led verde { ledR=0; wait_ms(300); ledR=1; wait_ms(300); } //goto lop1; }