IRDA
Dependencies: Pulse1 TextLCD mbed
main.cpp@0:6cd0d67e814d, 2015-04-29 (annotated)
- Committer:
- procesadores_FAC
- Date:
- Wed Apr 29 04:44:19 2015 +0000
- Revision:
- 0:6cd0d67e814d
- Child:
- 1:a9968ce1a119
IRDA_para control remoto
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 | 0:6cd0d67e814d | 29 | int C1=0x0F; |
procesadores_FAC | 0:6cd0d67e814d | 30 | int C4=0x0C; // quito cursor bajo |
procesadores_FAC | 0:6cd0d67e814d | 31 | |
procesadores_FAC | 0:6cd0d67e814d | 32 | int main(){ |
procesadores_FAC | 0:6cd0d67e814d | 33 | |
procesadores_FAC | 0:6cd0d67e814d | 34 | lcd.cls(); |
procesadores_FAC | 0:6cd0d67e814d | 35 | lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD |
procesadores_FAC | 0:6cd0d67e814d | 36 | while(1){ |
procesadores_FAC | 0:6cd0d67e814d | 37 | ini1: fflush( stdin ); |
procesadores_FAC | 0:6cd0d67e814d | 38 | headerL=0; |
procesadores_FAC | 0:6cd0d67e814d | 39 | headerH=0; |
procesadores_FAC | 0:6cd0d67e814d | 40 | led2=1; |
procesadores_FAC | 0:6cd0d67e814d | 41 | led=0; |
procesadores_FAC | 0:6cd0d67e814d | 42 | |
procesadores_FAC | 0:6cd0d67e814d | 43 | headerL = irda.read_low_us(); //funcion para leer un pulso de caida o bajo en header |
procesadores_FAC | 0:6cd0d67e814d | 44 | pc.printf("Header bajo dura %d us\n", headerL); |
procesadores_FAC | 0:6cd0d67e814d | 45 | lcd.cls(); |
procesadores_FAC | 0:6cd0d67e814d | 46 | lcd.locate(0,0); |
procesadores_FAC | 0:6cd0d67e814d | 47 | lcd.printf("HL=%d us", headerL); |
procesadores_FAC | 0:6cd0d67e814d | 48 | wait(0.1); |
procesadores_FAC | 0:6cd0d67e814d | 49 | headerH= irda.read_high_us(); |
procesadores_FAC | 0:6cd0d67e814d | 50 | pc.printf("Header alto dura %d us\n", headerH); |
procesadores_FAC | 0:6cd0d67e814d | 51 | lcd.locate(0,1); |
procesadores_FAC | 0:6cd0d67e814d | 52 | lcd.printf("HH=%d us", headerH); |
procesadores_FAC | 0:6cd0d67e814d | 53 | wait(0.5); |
procesadores_FAC | 0:6cd0d67e814d | 54 | lcd.cls(); |
procesadores_FAC | 0:6cd0d67e814d | 55 | lcd.locate(0,0); |
procesadores_FAC | 0:6cd0d67e814d | 56 | lcd.printf("T_bits= %d us", 600); |
procesadores_FAC | 0:6cd0d67e814d | 57 | lcd.locate(0,1); |
procesadores_FAC | 0:6cd0d67e814d | 58 | lcd.printf("Modulado = unos"); |
procesadores_FAC | 0:6cd0d67e814d | 59 | led=1; |
procesadores_FAC | 0:6cd0d67e814d | 60 | |
procesadores_FAC | 0:6cd0d67e814d | 61 | if (headerL > head_L && headerL < head_H) goto seguir;//verificar que este en la tolerancia +-1,8% |
procesadores_FAC | 0:6cd0d67e814d | 62 | else goto ini1; |
procesadores_FAC | 0:6cd0d67e814d | 63 | |
procesadores_FAC | 0:6cd0d67e814d | 64 | seguir: |
procesadores_FAC | 0:6cd0d67e814d | 65 | //leo los datos de la trama y se meten a un arreglo |
procesadores_FAC | 0:6cd0d67e814d | 66 | ///wait_us(4470);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO |
procesadores_FAC | 0:6cd0d67e814d | 67 | lcd.writeCommand(C4);//escribimos un comando segun el manual del modulo LCD para quitar cursor bajo |
procesadores_FAC | 0:6cd0d67e814d | 68 | wait_us(600); |
procesadores_FAC | 0:6cd0d67e814d | 69 | led2=0; |
procesadores_FAC | 0:6cd0d67e814d | 70 | for(i=0;i<(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos |
procesadores_FAC | 0:6cd0d67e814d | 71 | dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control |
procesadores_FAC | 0:6cd0d67e814d | 72 | num[i]=dato; |
procesadores_FAC | 0:6cd0d67e814d | 73 | } |
procesadores_FAC | 0:6cd0d67e814d | 74 | wait(0.5); //espero un poquito luego de leer todo el arreglo y ponerlo en pantalla |
procesadores_FAC | 0:6cd0d67e814d | 75 | pc.printf(",BAJA = %d",headerL); |
procesadores_FAC | 0:6cd0d67e814d | 76 | for(i=0;i<(num_bits);++i){ |
procesadores_FAC | 0:6cd0d67e814d | 77 | pc.printf(",%d",num[i]); |
procesadores_FAC | 0:6cd0d67e814d | 78 | } |
procesadores_FAC | 0:6cd0d67e814d | 79 | |
procesadores_FAC | 0:6cd0d67e814d | 80 | wait(0.1); //espero e imprimo en binario |
procesadores_FAC | 0:6cd0d67e814d | 81 | pc.printf("\n\n"); |
procesadores_FAC | 0:6cd0d67e814d | 82 | for(i=0;i<(num_bits);++i){ |
procesadores_FAC | 0:6cd0d67e814d | 83 | if(num[i] > ((T_alto+T_bajo)/2)) { |
procesadores_FAC | 0:6cd0d67e814d | 84 | bin[i]=1; |
procesadores_FAC | 0:6cd0d67e814d | 85 | pc.printf("%d",bin[i]); |
procesadores_FAC | 0:6cd0d67e814d | 86 | } |
procesadores_FAC | 0:6cd0d67e814d | 87 | if(num[i] < ((T_alto+T_bajo)/2)) { |
procesadores_FAC | 0:6cd0d67e814d | 88 | bin[i]=0; |
procesadores_FAC | 0:6cd0d67e814d | 89 | pc.printf("%d",bin[i]); |
procesadores_FAC | 0:6cd0d67e814d | 90 | } |
procesadores_FAC | 0:6cd0d67e814d | 91 | } |
procesadores_FAC | 0:6cd0d67e814d | 92 | pc.printf("\n\n"); |
procesadores_FAC | 0:6cd0d67e814d | 93 | lcd.cls(); |
procesadores_FAC | 0:6cd0d67e814d | 94 | lcd.printf("N_HEX="); |
procesadores_FAC | 0:6cd0d67e814d | 95 | for (i=0;i< num_bits;i =i+4){ |
procesadores_FAC | 0:6cd0d67e814d | 96 | |
procesadores_FAC | 0:6cd0d67e814d | 97 | long int x = bin[i]*8+bin[i+1]*4+bin[i+2]*2+bin[i+3]; |
procesadores_FAC | 0:6cd0d67e814d | 98 | // pc.printf("%d",x); |
procesadores_FAC | 0:6cd0d67e814d | 99 | |
procesadores_FAC | 0:6cd0d67e814d | 100 | if (x<10){ |
procesadores_FAC | 0:6cd0d67e814d | 101 | |
procesadores_FAC | 0:6cd0d67e814d | 102 | pc.printf("%d",x); |
procesadores_FAC | 0:6cd0d67e814d | 103 | lcd.printf("%d",x); |
procesadores_FAC | 0:6cd0d67e814d | 104 | } |
procesadores_FAC | 0:6cd0d67e814d | 105 | if (x==10){ |
procesadores_FAC | 0:6cd0d67e814d | 106 | pc.printf("A"); |
procesadores_FAC | 0:6cd0d67e814d | 107 | lcd.printf("A"); |
procesadores_FAC | 0:6cd0d67e814d | 108 | } |
procesadores_FAC | 0:6cd0d67e814d | 109 | if (x==11){ |
procesadores_FAC | 0:6cd0d67e814d | 110 | pc.printf("B"); |
procesadores_FAC | 0:6cd0d67e814d | 111 | lcd.printf("B"); |
procesadores_FAC | 0:6cd0d67e814d | 112 | } |
procesadores_FAC | 0:6cd0d67e814d | 113 | if (x==12){ |
procesadores_FAC | 0:6cd0d67e814d | 114 | pc.printf("C"); |
procesadores_FAC | 0:6cd0d67e814d | 115 | lcd.printf("C"); |
procesadores_FAC | 0:6cd0d67e814d | 116 | } |
procesadores_FAC | 0:6cd0d67e814d | 117 | if (x==13){ |
procesadores_FAC | 0:6cd0d67e814d | 118 | pc.printf("D"); |
procesadores_FAC | 0:6cd0d67e814d | 119 | lcd.printf("D"); |
procesadores_FAC | 0:6cd0d67e814d | 120 | } |
procesadores_FAC | 0:6cd0d67e814d | 121 | if (x==14){ |
procesadores_FAC | 0:6cd0d67e814d | 122 | pc.printf("E"); |
procesadores_FAC | 0:6cd0d67e814d | 123 | lcd.printf("E"); |
procesadores_FAC | 0:6cd0d67e814d | 124 | } |
procesadores_FAC | 0:6cd0d67e814d | 125 | if (x==11){ |
procesadores_FAC | 0:6cd0d67e814d | 126 | pc.printf("F"); |
procesadores_FAC | 0:6cd0d67e814d | 127 | lcd.printf("F"); |
procesadores_FAC | 0:6cd0d67e814d | 128 | } |
procesadores_FAC | 0:6cd0d67e814d | 129 | } |
procesadores_FAC | 0:6cd0d67e814d | 130 | |
procesadores_FAC | 0:6cd0d67e814d | 131 | } |
procesadores_FAC | 0:6cd0d67e814d | 132 | } |