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

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;                 
}