es una versión mejorada que no requiere suiche y da mas informacion

Dependencies:   mbed Pulse1

Fork of CAPTURAS_IRDA by Gustavo Ramirez

main.cpp

Committer:
tony63
Date:
2019-03-14
Revision:
4:e30f322c931d
Parent:
3:0e1e959c2f4f

File content as of revision 4:e30f322c931d:

//este programa extrae vector de tiempos de una tecla pulsada a altos o bajos
//se debe disparar el control dos veces, segun lo indique el programa
//para cualquier numero de bits de datos, pero limitamos el vector a 65 pulsos en esta version
//entrega las dos cabeceras baja en un intento de disparo y una alta en el segundo disparo. para solo verificar
//el programa no detecta tiempos de pulsos de forma automatica
//ustede debe ingresar todos los tiempos del control a usar o no funciona
//segun el fabricante los pulsos pueden ser altos(samsumg) o bajos(sony)
//al terminar se debe dar reset a la FRDMKL25Z, recerde reconectar termite o programa de monitoreo serial
//para el control loco usamos cadenas altas

#include "mbed.h"
#include <Pulse1.h>
PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo

Serial pc(USBTX, USBRX);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
int numN[65];//cadena para almacenar todos los tiempos que conforman los bits de datos
int numP[65];//cadena para almacenar todos los tiempos que conforman los bits de datos
int bin[65];//cadena para almacenar todos los tiempos que conforman los bits de datos
int dato; // tiempo de cada dato que se lee
int pul_low;
int i,j,k,header,proL,proH; 
int r; 
int mode=1;
int code;
int numb=65;
int main(){
pc.printf("\n");
pc.printf("este codigo es para 32 bits de datos");
pc.printf("\n");
pc.printf("pise reset para otro codigo");
pc.printf("\n");
fflush( stdin );
lop1:  if(mode){
       header = irda.read_low_us();
       if(header>3400) goto seguir1;  //espera un header bajo de al menos 3,4mS
       goto lop1;
       }
       
lop2:  if(!mode){
       header = irda.read_high_us(); 
       if(header>1600) goto seguir2; // espera un header alto de 1,6mS 
       goto lop2;
       }
       
seguir1:
      for(i=0;i<numb;++i){
      numN[i] = irda.read_low_us();    //funcion para leer un pulso bajo
      }
      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){
          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"); 
                      
      wait(2);
      header=0;
      proL=0;
      pc.printf("\n");
      pc.printf("dispare de nuevo para altos");
      mode=!mode;
      pc.printf("\n");
      goto lop1;
seguir2:
      for(i=0;i<numb;++i){  
      numP[i] = irda.read_high_us();    //funcion para leer un pulso alto
      if (numP[i]>10000){pc.printf("Final inesperado, nbits=%d....",i,"\n");}//cuenta efectivamente los bits
                       }
      for(i=0;i<numb;++i){
      pc.printf("%d,",numP[i]);
                       }
      pc.printf("\n");
      pc.printf("copie esta cadena de arriba en su programa..omita el ultimo");
      pc.printf("\n");
      pc.printf("HeadeH=%d \n",header," uS");
      header=0;
      wait(2);
      
      goto lop1;                 
}