TAREA

Dependencies:   Debounced Pulse1 TextLCD mbed

Dependents:   IRDA

Fork of irda1 by Gustavo Ramirez

main.cpp

Committer:
sagilar
Date:
2015-04-29
Revision:
4:d8df2edc8848
Parent:
3:7a5b5eea31c9

File content as of revision 4:d8df2edc8848:

#include "mbed.h"
#include <Pulse1.h>
#include "TextLCD.h"
#include "DebouncedIn.h"
#include <math.h>
#include <string.h>
#include <stdlib.h> 
PulseInOut irda(PTC2);// en este puerto se pone el sensor infrarrojo
Serial pc(USBTX, USBRX);
TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
DebouncedIn button1(PTC12);// BOTON scroll
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);

int header =0;
int header2 =0; //tiempo de cabecera pulso abajo
const int head_H = 2916; //+20% medida con osciloscopio en microsegundos
const int head_L = 1944;//-20%  medida con osciloscopio
int i=0;
int resi=0,n1,n2,n;
float unos,ceros,desc;
int dec=0;
char hex[3];
int c=0;
const int T_alto=1170;//ponga su tiempo de la prueba
const int T_bajo=567;//ponga su tiempo de la prueba
const int num_bits = 16;//ponga su numero de bits
int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
int desca[num_bits];
int dato,dato2; // tiempo de cada dato que se lee
int main(){
led1=1; 
led3=1;
 lcd.cls();
while(1){
ini1: header=0;
 led2=1;
 n1=0;
 unos=0;
 ceros=0;
 n2=0;
 desc=0;
 lcd.cls();
    lcd.printf("Esperando codigo IR\n\n");
   header = irda.read_low_us();    //funcion para leer un pulso de caida o bajo
 
      if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20%
      else goto ini1;
    
 seguir:
       //leo los datos de la trama y se meten a un arreglo
        //funcion para leer un pulso de caida o bajo
      led2=0;
         header2 = irda.read_high_us(); 
      // wait_us(1600);
      for(i=0;i<(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
     dato = irda.read_low_us(); //leer un bit de datos que es pulso abajo en este control 
         num[i]=dato;
            //wait_us(300); 
            if (i<7){//la mitad de los bits
                
     dato2 = irda.read_high_us();//Para calcular los tiempos de descanso
          desca[i]=dato2;
     }
     }
     wait(0.5);
      for(i=0;i<(num_bits-1);++i){  
      pc.printf(",%d",num[i]);
      }
      wait(0.1);  //espero e imprimo en binario  
      pc.printf("\n\n");
      for(i=0;i<(num_bits-1);++i){  
      desc=desc+desca[i];
      if(num[i] > ((T_alto+T_bajo)/2)){
           pc.printf("1");
            unos=unos+num[i];
            n1=n1+1;
            dec=dec+(pow(2.0,14-i));//Convierte binario a decimal
          // lcd.printf("1");
            }
      else {
          ceros=ceros+num[i];
          n2=n2+1;
          pc.printf("0"); 
         // lcd.printf("0");
      } 
      }
       desc=desc/(num_bits/2);
      //Convierte decimal a hexadecimal
       unos=unos/n1;
      ceros=ceros/n2;
     for(i=0;i<4;++i){
     resi=dec%16;
     dec=(dec/16);
     if (resi<10){
      hex[i]=resi;
      hex[i]=hex[i]-208;
     }
     else if (resi==10) hex[i]='A';
     else if (resi==11) hex[i]='B';
     else if (resi==12) hex[i]='C';
     else if (resi==13) hex[i]='D';
     else if (resi==14) hex[i]='E';
     else if (resi==15) hex[i]='F';
    }
    n=n1+n2+1;
      
       lcd.cls();
            lcd.printf("El header dura:\nH:%d L:%d us",header,header2);
    while(1){   
      
      
      
      if (button1.falling()){
                
         if (c==0||c==1||c==2||c==3||c==4)c=c+1;
        else if (c==5)c=0;    
        
      
     
      if (c==1){
              lcd.cls();
             lcd.printf("Los tiempos son: UNO:%01.1f ...",unos);
               }
      if (c==2){
              lcd.cls();
              lcd.printf("CERO: %01.1f\n (Promedio)...",ceros);
      }
       if (c==3){
              lcd.cls();
              lcd.printf("El tiempo de\ndescanso: %01.1f",desc);
      }
         if (c==4){
              lcd.cls();
             lcd.printf("El numero de \nbits es: %d ...",n);
               }
       if (c==5){
              lcd.cls();
             lcd.printf("El codigo en hex es:");
             lcd.printf(" %c%c%c%c",hex[3],hex[2],hex[1],hex[0]);
             lcd.printf(" -->");
      }
      if (c==0){
                   lcd.cls();
            lcd.printf("El header dura:\nH:%d L:%d us",header,header2);
    }
   }   
}
}

}