IRDA

Dependencies:   Pulse1 TextLCD mbed

Committer:
procesadores_FAC
Date:
Wed Apr 29 15:56:05 2015 +0000
Revision:
3:829a04f2ecda
Parent:
2:a2ec9f68d387
IRDA

Who changed what in which revision?

UserRevisionLine numberNew contents of line
procesadores_FAC 0:6cd0d67e814d 1 //////////////////////
procesadores_FAC 0:6cd0d67e814d 2 // TAREA_5_IRDA
procesadores_FAC 0:6cd0d67e814d 3 //////////////////////
procesadores_FAC 0:6cd0d67e814d 4 #include "mbed.h"
procesadores_FAC 0:6cd0d67e814d 5 #include <Pulse1.h>
procesadores_FAC 0:6cd0d67e814d 6 #include "TextLCD.h"
procesadores_FAC 0:6cd0d67e814d 7
procesadores_FAC 0:6cd0d67e814d 8 //control remoto videobeam aula
procesadores_FAC 0:6cd0d67e814d 9 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
procesadores_FAC 0:6cd0d67e814d 10 Serial pc(USBTX, USBRX);
procesadores_FAC 0:6cd0d67e814d 11 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
procesadores_FAC 0:6cd0d67e814d 12
procesadores_FAC 0:6cd0d67e814d 13 DigitalOut led(LED1);
procesadores_FAC 0:6cd0d67e814d 14 DigitalOut led2(LED2);
procesadores_FAC 0:6cd0d67e814d 15
procesadores_FAC 0:6cd0d67e814d 16 // variables
procesadores_FAC 0:6cd0d67e814d 17 int headerL =0; //tiempo de cabecera pulso abajo
procesadores_FAC 0:6cd0d67e814d 18 int headerH =0;
procesadores_FAC 0:6cd0d67e814d 19 const int head_H = 4492; //+0.5% medida con osciloscopio en microsegundos
procesadores_FAC 0:6cd0d67e814d 20 const int head_L = 4447;//-0.5% medida con osciloscopio
procesadores_FAC 0:6cd0d67e814d 21 int i=0;
procesadores_FAC 0:6cd0d67e814d 22 const int T_alto=1700;//ponga su tiempo de la prueba
procesadores_FAC 0:6cd0d67e814d 23 const int T_bajo=600;//ponga su tiempo de la prueba
procesadores_FAC 0:6cd0d67e814d 24 const int num_bits = 32;//ponga su numero de bits
procesadores_FAC 0:6cd0d67e814d 25 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
procesadores_FAC 0:6cd0d67e814d 26 int dato; // tiempo de cada dato que se lee
procesadores_FAC 0:6cd0d67e814d 27 int bin[num_bits];
procesadores_FAC 0:6cd0d67e814d 28 int p;
procesadores_FAC 1:a9968ce1a119 29 int b;
procesadores_FAC 1:a9968ce1a119 30 int a;
procesadores_FAC 0:6cd0d67e814d 31 int C1=0x0F;
procesadores_FAC 0:6cd0d67e814d 32 int C4=0x0C; // quito cursor bajo
procesadores_FAC 0:6cd0d67e814d 33
procesadores_FAC 0:6cd0d67e814d 34 int main(){
procesadores_FAC 0:6cd0d67e814d 35
procesadores_FAC 0:6cd0d67e814d 36 lcd.cls();
procesadores_FAC 0:6cd0d67e814d 37 lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
procesadores_FAC 0:6cd0d67e814d 38 while(1){
procesadores_FAC 0:6cd0d67e814d 39 ini1: fflush( stdin );
procesadores_FAC 0:6cd0d67e814d 40 headerL=0;
procesadores_FAC 0:6cd0d67e814d 41 headerH=0;
procesadores_FAC 0:6cd0d67e814d 42 led2=1;
procesadores_FAC 0:6cd0d67e814d 43 led=0;
procesadores_FAC 1:a9968ce1a119 44
procesadores_FAC 0:6cd0d67e814d 45
procesadores_FAC 0:6cd0d67e814d 46 headerL = irda.read_low_us(); //funcion para leer un pulso de caida o bajo en header
procesadores_FAC 0:6cd0d67e814d 47 pc.printf("Header bajo dura %d us\n", headerL);
procesadores_FAC 0:6cd0d67e814d 48 lcd.cls();
procesadores_FAC 0:6cd0d67e814d 49 lcd.locate(0,0);
procesadores_FAC 0:6cd0d67e814d 50 lcd.printf("HL=%d us", headerL);
procesadores_FAC 0:6cd0d67e814d 51 wait(0.1);
procesadores_FAC 0:6cd0d67e814d 52 headerH= irda.read_high_us();
procesadores_FAC 0:6cd0d67e814d 53 pc.printf("Header alto dura %d us\n", headerH);
procesadores_FAC 1:a9968ce1a119 54 lcd.locate(0,1);
procesadores_FAC 0:6cd0d67e814d 55 lcd.printf("HH=%d us", headerH);
procesadores_FAC 1:a9968ce1a119 56 wait(0.3);
procesadores_FAC 0:6cd0d67e814d 57 led=1;
procesadores_FAC 0:6cd0d67e814d 58
procesadores_FAC 0:6cd0d67e814d 59 if (headerL > head_L && headerL < head_H) goto seguir;//verificar que este en la tolerancia +-1,8%
procesadores_FAC 0:6cd0d67e814d 60 else goto ini1;
procesadores_FAC 0:6cd0d67e814d 61
procesadores_FAC 0:6cd0d67e814d 62 seguir:
procesadores_FAC 0:6cd0d67e814d 63 //leo los datos de la trama y se meten a un arreglo
procesadores_FAC 0:6cd0d67e814d 64 ///wait_us(4470);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO
procesadores_FAC 0:6cd0d67e814d 65 lcd.writeCommand(C4);//escribimos un comando segun el manual del modulo LCD para quitar cursor bajo
procesadores_FAC 0:6cd0d67e814d 66 wait_us(600);
procesadores_FAC 0:6cd0d67e814d 67 led2=0;
procesadores_FAC 1:a9968ce1a119 68 for(i=0;i<(num_bits);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
procesadores_FAC 0:6cd0d67e814d 69 dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control
procesadores_FAC 0:6cd0d67e814d 70 num[i]=dato;
procesadores_FAC 1:a9968ce1a119 71 }
procesadores_FAC 1:a9968ce1a119 72
procesadores_FAC 1:a9968ce1a119 73
procesadores_FAC 1:a9968ce1a119 74 wait(0.5);//espero un poquito luego de leer todo el arreglo y ponerlo en pantalla
procesadores_FAC 0:6cd0d67e814d 75 for(i=0;i<(num_bits);++i){
procesadores_FAC 0:6cd0d67e814d 76 pc.printf(",%d",num[i]);
procesadores_FAC 0:6cd0d67e814d 77 }
procesadores_FAC 0:6cd0d67e814d 78
procesadores_FAC 0:6cd0d67e814d 79 wait(0.1); //espero e imprimo en binario
procesadores_FAC 0:6cd0d67e814d 80 pc.printf("\n\n");
procesadores_FAC 1:a9968ce1a119 81 b=0;
procesadores_FAC 1:a9968ce1a119 82 a=0;
procesadores_FAC 1:a9968ce1a119 83 int c=0;
procesadores_FAC 1:a9968ce1a119 84 int d=0;
procesadores_FAC 0:6cd0d67e814d 85 for(i=0;i<(num_bits);++i){
procesadores_FAC 0:6cd0d67e814d 86 if(num[i] > ((T_alto+T_bajo)/2)) {
procesadores_FAC 1:a9968ce1a119 87 b = num[i]+b;
procesadores_FAC 0:6cd0d67e814d 88 bin[i]=1;
procesadores_FAC 0:6cd0d67e814d 89 pc.printf("%d",bin[i]);
procesadores_FAC 1:a9968ce1a119 90 a = a+1;
procesadores_FAC 0:6cd0d67e814d 91 }
procesadores_FAC 0:6cd0d67e814d 92 if(num[i] < ((T_alto+T_bajo)/2)) {
procesadores_FAC 1:a9968ce1a119 93 c = num[i]+c;
procesadores_FAC 0:6cd0d67e814d 94 bin[i]=0;
procesadores_FAC 0:6cd0d67e814d 95 pc.printf("%d",bin[i]);
procesadores_FAC 1:a9968ce1a119 96 d = d+1;
procesadores_FAC 0:6cd0d67e814d 97 }
procesadores_FAC 0:6cd0d67e814d 98 }
procesadores_FAC 1:a9968ce1a119 99 pc.printf("\n\n");
procesadores_FAC 1:a9968ce1a119 100 int h1 = b/a;
procesadores_FAC 1:a9968ce1a119 101 int h0 = c/d;
procesadores_FAC 1:a9968ce1a119 102 pc.printf(" tide unos1 =%d",b);
procesadores_FAC 1:a9968ce1a119 103 pc.printf(", can1 =%d",a);
procesadores_FAC 1:a9968ce1a119 104 pc.printf(" tide unoso =%d",c);
procesadores_FAC 1:a9968ce1a119 105 pc.printf(", can0 =%d",d);
procesadores_FAC 1:a9968ce1a119 106
procesadores_FAC 1:a9968ce1a119 107 pc.printf("\n\n");
procesadores_FAC 1:a9968ce1a119 108 wait (0.3);
procesadores_FAC 1:a9968ce1a119 109 pc.printf(" t_unos =%d",h1);
procesadores_FAC 1:a9968ce1a119 110 pc.printf(", t_ceros =%d",h0);
procesadores_FAC 1:a9968ce1a119 111
procesadores_FAC 1:a9968ce1a119 112
procesadores_FAC 3:829a04f2ecda 113
procesadores_FAC 1:a9968ce1a119 114 lcd.locate(0,0);
procesadores_FAC 1:a9968ce1a119 115 lcd.printf("N_bits = %d",i);
procesadores_FAC 3:829a04f2ecda 116 wait(1);
procesadores_FAC 1:a9968ce1a119 117
procesadores_FAC 1:a9968ce1a119 118 lcd.locate(0,0);
procesadores_FAC 1:a9968ce1a119 119 lcd.printf("t_unos = %d",h1);
procesadores_FAC 1:a9968ce1a119 120 lcd.locate(0,1);
procesadores_FAC 1:a9968ce1a119 121 lcd.printf("t_ceros = %d",h0);
procesadores_FAC 3:829a04f2ecda 122 wait(1);
procesadores_FAC 0:6cd0d67e814d 123 pc.printf("\n\n");
procesadores_FAC 0:6cd0d67e814d 124 lcd.cls();
procesadores_FAC 0:6cd0d67e814d 125 lcd.printf("N_HEX=");
procesadores_FAC 0:6cd0d67e814d 126 for (i=0;i< num_bits;i =i+4){
procesadores_FAC 0:6cd0d67e814d 127
procesadores_FAC 0:6cd0d67e814d 128 long int x = bin[i]*8+bin[i+1]*4+bin[i+2]*2+bin[i+3];
procesadores_FAC 3:829a04f2ecda 129 pc.printf("%x",x);
procesadores_FAC 2:a2ec9f68d387 130 lcd.printf("%x",x);
procesadores_FAC 0:6cd0d67e814d 131 }
procesadores_FAC 0:6cd0d67e814d 132
procesadores_FAC 0:6cd0d67e814d 133 }
procesadores_FAC 0:6cd0d67e814d 134 }