TAREA
Dependencies: Debounced Pulse1 TextLCD mbed
Fork of irda1 by
Diff: main.cpp
- Revision:
- 3:7a5b5eea31c9
- Parent:
- 2:6a15ab0305c8
- Child:
- 4:d8df2edc8848
--- a/main.cpp Fri Nov 08 07:40:04 2013 +0000 +++ b/main.cpp Wed Apr 29 14:44:33 2015 +0000 @@ -1,48 +1,149 @@ #include "mbed.h" #include <Pulse1.h> - -PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo +#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); -DigitalOut led(LED1); +TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 +DebouncedIn button1(PTC12);// BOTON scroll +DigitalOut led1(LED1); DigitalOut led2(LED2); -int header =0; //tiempo de cabecera pulso abajo -const int head_H = 9100; //+20% medida con osciloscopio en microsegundos -const int head_L = 8500;//-20% medida con osciloscopio +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; -const int T_alto=1680;//ponga su tiempo de la prueba -const int T_bajo=526;//ponga su tiempo de la prueba -const int num_bits = 32;//ponga su numero de bits +int resi=0,n1,n2; +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 dato; // tiempo de cada dato que se lee - +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; - led=1; - header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo + 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: + + seguir: //leo los datos de la trama y se meten a un arreglo - wait_us(5000); + //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_high_us(); //leer un bit de datos que es pulso arriba en este control - num[i]=dato; - wait_us(300); - } - wait(0.5); //espero un poquito antes de leer todo el arreglo y ponerlo en pantalla - pc.printf(",%d",header); + dato = irda.read_low_us(); //leer un bit de datos que es pulso abajo en este control + num[i]=dato; + //wait_us(300); + 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 + wait(0.1); //espero e imprimo en binario pc.printf("\n\n"); for(i=0;i<(num_bits-1);++i){ - if(num[i] > ((T_alto+T_bajo)/2)) pc.printf("1"); - else pc.printf("0"); + 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); + //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'; + } + + 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); } - } \ No newline at end of file + 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 ...",n1+n2+1); + } + 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); + } + } +} +} + +} +