TAREA
Dependencies: Debounced Pulse1 TextLCD mbed
Fork of irda1 by
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); } } } } }