IRDA
Dependencies: Pulse1 TextLCD mbed
main.cpp@3:829a04f2ecda, 2015-04-29 (annotated)
- 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?
User | Revision | Line number | New 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 | } |