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

Dependencies:   mbed Pulse1

Committer:
tony63
Date:
Tue Jun 25 17:47:43 2019 +0000
Revision:
3:a63a363d9b95
Parent:
2:d189b5862909
NUEVA VERSION;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tony63 3:a63a363d9b95 1 //PROGAMA PARA CARACTERIZAR CONTROLES REMOTOS INFRARROJOS
tony63 3:a63a363d9b95 2 //AUN NO DETECTA NUMERO DE BITS, USTED DEBE ADAPATAR EL PROGRANAMA PARA ESO
tony63 2:d189b5862909 3 //ESTA VERSION PROPORCIONA EL VECTOR DE LA TECLA PULSADA EN EL SEGUNDO MODO O CON EL SUICHE EN BAJO
tony63 3:a63a363d9b95 4 //PARA MANDOS DE 31 BITS QUE EN CASO DE SER INCOSTISTENTES SE PUEDEN MODIFICAR
tony63 2:d189b5862909 5 //entrega las dos cabeceras alta y baja segun el modo
tony63 0:86c0c1652dd4 6 #include "mbed.h"
tony63 0:86c0c1652dd4 7 #include <Pulse1.h>
tony63 0:86c0c1652dd4 8 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
tony63 0:86c0c1652dd4 9
tony63 0:86c0c1652dd4 10 Serial pc(USBTX, USBRX);
tony63 3:a63a363d9b95 11
tony63 3:a63a363d9b95 12 DigitalOut ledA (LED1);
tony63 3:a63a363d9b95 13 DigitalOut ledR (LED2);
tony63 3:a63a363d9b95 14 DigitalOut ledV (LED3);
tony63 3:a63a363d9b95 15 int numN[45];//cadena para almacenar todos los tiempos que conforman los bits de datos bajos
tony63 3:a63a363d9b95 16 int numP[45];//cadena para almacenar todos los tiempos que conforman los bits de datos altos
tony63 3:a63a363d9b95 17 int bin[45];//cadena para almacenar todos los tiempos que conforman los bits de datos solo tiempos en uS
tony63 3:a63a363d9b95 18 int dato; // tiempo de cada dato que se lee tiempo instantaneo
tony63 3:a63a363d9b95 19 int pul_low; // pulso bajo
tony63 3:a63a363d9b95 20 int i,j,k,proL,proH;
tony63 3:a63a363d9b95 21 int header=0;//cabeceras
tony63 1:69f833c768c8 22 int r;
tony63 3:a63a363d9b95 23 int mode=1;//moddo de lectura
tony63 2:d189b5862909 24 int code;
tony63 3:a63a363d9b95 25 int numb=44;//numero de bits de la cadena
tony63 3:a63a363d9b95 26
tony63 3:a63a363d9b95 27 //***********************************************************************************************************
tony63 0:86c0c1652dd4 28 int main(){
tony63 3:a63a363d9b95 29 ledR=1;
tony63 3:a63a363d9b95 30 ledA=1;
tony63 3:a63a363d9b95 31 ledV=0; //prendo led verde.............................
tony63 3:a63a363d9b95 32 wait(3); //espero 3 segundos
tony63 2:d189b5862909 33 pc.printf("\n");
tony63 2:d189b5862909 34 pc.printf("este codigo es para 32 bits de datos");
tony63 2:d189b5862909 35 pc.printf("\n");
tony63 3:a63a363d9b95 36 pc.printf("Al final de esta prueba pise reset para otro codigo");
tony63 2:d189b5862909 37 pc.printf("\n");
tony63 3:a63a363d9b95 38 fflush( stdin );//limpio buffer de datos usart
tony63 3:a63a363d9b95 39 lop1: if(mode){ //si el modo es 1
tony63 3:a63a363d9b95 40 header = irda.read_low_us();//pregunto por un pulso bajo de mas de 3000 debe ser un header
tony63 3:a63a363d9b95 41 if(header>3000) goto seguir1;
tony63 3:a63a363d9b95 42 goto lop1;//repito
tony63 2:d189b5862909 43 }
tony63 2:d189b5862909 44
tony63 2:d189b5862909 45 lop2: if(!mode){
tony63 2:d189b5862909 46 header = irda.read_high_us();
tony63 3:a63a363d9b95 47 if(header>3000) goto seguir2;
tony63 2:d189b5862909 48 goto lop2;
tony63 2:d189b5862909 49 }
tony63 0:86c0c1652dd4 50
tony63 2:d189b5862909 51 seguir1:
tony63 3:a63a363d9b95 52 ledV=1;
tony63 3:a63a363d9b95 53 ledA=0;
tony63 2:d189b5862909 54 for(i=0;i<numb;++i){
tony63 2:d189b5862909 55 numN[i] = irda.read_low_us(); //funcion para leer un pulso bajo
tony63 3:a63a363d9b95 56 wait_us(300);//espera sugerida
tony63 2:d189b5862909 57 }
tony63 3:a63a363d9b95 58 pc.printf("Estos de abajo son los pulsos bajos \n");
tony63 2:d189b5862909 59 for(i=0;i<numb;++i){
tony63 2:d189b5862909 60 pc.printf("%d,",numN[i]);
tony63 3:a63a363d9b95 61 }
tony63 2:d189b5862909 62 pc.printf("\n");
tony63 2:d189b5862909 63 pc.printf("HeaderL=%d \n",header," uS");
tony63 2:d189b5862909 64 header=0;
tony63 3:a63a363d9b95 65 for(i=0;i<numb;++i){//los sumo a todos son de espera
tony63 2:d189b5862909 66 proL=numN[i]+proL;
tony63 2:d189b5862909 67 }
tony63 2:d189b5862909 68 pc.printf("\n");
tony63 2:d189b5862909 69 pc.printf("prom_bajos=%d", proL/numb);
tony63 2:d189b5862909 70 pc.printf("\n");
tony63 2:d189b5862909 71 pc.printf("Si el promedio bajos es mas grande de lo normal, baje en numb en el codigo y recompile");
tony63 3:a63a363d9b95 72
tony63 3:a63a363d9b95 73 for(i=0;i<numb;++i){
tony63 3:a63a363d9b95 74 numN[i] = 0; //limpiar arreglo
tony63 3:a63a363d9b95 75 }
tony63 2:d189b5862909 76
tony63 2:d189b5862909 77 header=0;
tony63 2:d189b5862909 78 proL=0;
tony63 2:d189b5862909 79 pc.printf("\n");
tony63 2:d189b5862909 80 pc.printf("dispare de nuevo para altos");
tony63 3:a63a363d9b95 81 mode=!mode;//cambio de modo ahora es modo cero..
tony63 2:d189b5862909 82 pc.printf("\n");
tony63 3:a63a363d9b95 83 header=0;
tony63 3:a63a363d9b95 84 goto lop2;
tony63 2:d189b5862909 85 seguir2:
tony63 3:a63a363d9b95 86 ledA=1;
tony63 3:a63a363d9b95 87 ledR=0;//prendo led verde
tony63 3:a63a363d9b95 88 pc.printf("Estos de abajo son los pulsos Altos \n");
tony63 2:d189b5862909 89 for(i=0;i<numb;++i){
tony63 2:d189b5862909 90 numP[i] = irda.read_high_us(); //funcion para leer un pulso alto
tony63 3:a63a363d9b95 91 wait_us(300);
tony63 2:d189b5862909 92 }
tony63 2:d189b5862909 93 for(i=0;i<numb;++i){
tony63 2:d189b5862909 94 pc.printf("%d,",numP[i]);
tony63 2:d189b5862909 95 }
tony63 2:d189b5862909 96 pc.printf("\n");
tony63 2:d189b5862909 97 pc.printf("copie esta cadena de arriba en su programa");
tony63 2:d189b5862909 98 pc.printf("\n");
tony63 2:d189b5862909 99 pc.printf("HeadeH=%d \n",header," uS");
tony63 2:d189b5862909 100 header=0;
tony63 3:a63a363d9b95 101 for(i=0;i<numb;++i){
tony63 3:a63a363d9b95 102 numP[i] = 0; //limpiar arreglo
tony63 3:a63a363d9b95 103 }
tony63 3:a63a363d9b95 104 ledR=1;//apago todos los leds
tony63 3:a63a363d9b95 105 ledA=1;
tony63 3:a63a363d9b95 106 ledV=1;
tony63 3:a63a363d9b95 107 while(1)//de forma infinita oscila led verde
tony63 3:a63a363d9b95 108 {
tony63 3:a63a363d9b95 109 ledR=0;
tony63 3:a63a363d9b95 110 wait_ms(300);
tony63 3:a63a363d9b95 111 ledR=1;
tony63 3:a63a363d9b95 112 wait_ms(300);
tony63 3:a63a363d9b95 113 }
tony63 3:a63a363d9b95 114
tony63 3:a63a363d9b95 115 //goto lop1;
tony63 2:d189b5862909 116 }
tony63 3:a63a363d9b95 117
tony63 3:a63a363d9b95 118