Infrarojo

Dependencies:   Pulse1 TextLCD mbed

Committer:
avallejopo
Date:
Sat Nov 16 17:29:54 2013 +0000
Revision:
0:2306789ed6f5
Infrarojo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
avallejopo 0:2306789ed6f5 1 #include "mbed.h"
avallejopo 0:2306789ed6f5 2 #include <Pulse1.h>
avallejopo 0:2306789ed6f5 3 #include "TextLCD.h"
avallejopo 0:2306789ed6f5 4
avallejopo 0:2306789ed6f5 5 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
avallejopo 0:2306789ed6f5 6 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
avallejopo 0:2306789ed6f5 7 Serial pc(USBTX, USBRX);
avallejopo 0:2306789ed6f5 8 DigitalOut led(LED1);
avallejopo 0:2306789ed6f5 9 DigitalOut led2(LED2);
avallejopo 0:2306789ed6f5 10 DigitalOut led3(LED3);
avallejopo 0:2306789ed6f5 11
avallejopo 0:2306789ed6f5 12 int header =0; //tiempo de cabecera pulso abajo
avallejopo 0:2306789ed6f5 13 const int head_H = 10884; //+20% medida con osciloscopio en microsegundos
avallejopo 0:2306789ed6f5 14 const int head_L = 7256;//-20% medida con osciloscopio
avallejopo 0:2306789ed6f5 15 int i=0;
avallejopo 0:2306789ed6f5 16 const int T_alto=1570;//ponga su tiempo de la prueba
avallejopo 0:2306789ed6f5 17 const int T_bajo=467;//ponga su tiempo de la prueba
avallejopo 0:2306789ed6f5 18 const int num_bits = 32;//ponga su numero de bits
avallejopo 0:2306789ed6f5 19 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
avallejopo 0:2306789ed6f5 20 int sec[num_bits];//cadena para almacenar la cadena codificada en binario
avallejopo 0:2306789ed6f5 21 int boton1[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0};
avallejopo 0:2306789ed6f5 22 int boton2[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0};
avallejopo 0:2306789ed6f5 23 int boton3[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0};
avallejopo 0:2306789ed6f5 24 int flag1,flag2,flag3; //Banderas de boton presionado
avallejopo 0:2306789ed6f5 25 int dato; // tiempo de cada dato que se lee
avallejopo 0:2306789ed6f5 26
avallejopo 0:2306789ed6f5 27 int main()
avallejopo 0:2306789ed6f5 28 {
avallejopo 0:2306789ed6f5 29 led3=1;
avallejopo 0:2306789ed6f5 30 led2=1;
avallejopo 0:2306789ed6f5 31 led=1;
avallejopo 0:2306789ed6f5 32 while(1)
avallejopo 0:2306789ed6f5 33 {
avallejopo 0:2306789ed6f5 34 ini1:
avallejopo 0:2306789ed6f5 35 header=0;
avallejopo 0:2306789ed6f5 36 header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo
avallejopo 0:2306789ed6f5 37 if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20%
avallejopo 0:2306789ed6f5 38 else goto ini1;
avallejopo 0:2306789ed6f5 39
avallejopo 0:2306789ed6f5 40 seguir:
avallejopo 0:2306789ed6f5 41 //leo los datos de la trama y se meten a un arreglo
avallejopo 0:2306789ed6f5 42 wait_us(2000);
avallejopo 0:2306789ed6f5 43 for(i=0; i<(num_bits-1); ++i) // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
avallejopo 0:2306789ed6f5 44 {
avallejopo 0:2306789ed6f5 45 dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control
avallejopo 0:2306789ed6f5 46 num[i]=dato;
avallejopo 0:2306789ed6f5 47 wait_us(332);
avallejopo 0:2306789ed6f5 48 }
avallejopo 0:2306789ed6f5 49 //wait(0.5); //espero un poquito antes de leer todo el arreglo y ponerlo en pantalla
avallejopo 0:2306789ed6f5 50 pc.printf(",%d",header);
avallejopo 0:2306789ed6f5 51 for(i=0; i<num_bits; ++i)
avallejopo 0:2306789ed6f5 52 {
avallejopo 0:2306789ed6f5 53 pc.printf(",%d",num[i]);
avallejopo 0:2306789ed6f5 54 }
avallejopo 0:2306789ed6f5 55 //wait(0.1); //espero e imprimo en binario
avallejopo 0:2306789ed6f5 56 pc.printf("\n\n");
avallejopo 0:2306789ed6f5 57 for(i=0; i<num_bits; ++i)
avallejopo 0:2306789ed6f5 58 {
avallejopo 0:2306789ed6f5 59 if(num[i] > ((T_alto+T_bajo)/2))
avallejopo 0:2306789ed6f5 60 {
avallejopo 0:2306789ed6f5 61 pc.printf("1");
avallejopo 0:2306789ed6f5 62 sec[i]=1; // guardo la secuancia en binario
avallejopo 0:2306789ed6f5 63 }
avallejopo 0:2306789ed6f5 64 else
avallejopo 0:2306789ed6f5 65 {
avallejopo 0:2306789ed6f5 66 sec[i]=0; //guardo la secuencia en binario
avallejopo 0:2306789ed6f5 67 pc.printf("0");
avallejopo 0:2306789ed6f5 68 }
avallejopo 0:2306789ed6f5 69 }
avallejopo 0:2306789ed6f5 70
avallejopo 0:2306789ed6f5 71 flag1=1;
avallejopo 0:2306789ed6f5 72 flag2=1;
avallejopo 0:2306789ed6f5 73 flag3=1;
avallejopo 0:2306789ed6f5 74 for(i=0; i<32; ++i)
avallejopo 0:2306789ed6f5 75 {
avallejopo 0:2306789ed6f5 76 if(sec[i]!=boton1[i]) //en caso de que un bit no coincida se descarta el boton 1
avallejopo 0:2306789ed6f5 77 {
avallejopo 0:2306789ed6f5 78 flag1=0;
avallejopo 0:2306789ed6f5 79 }
avallejopo 0:2306789ed6f5 80 if(sec[i]!=boton2[i]) //en caso de que un bit no coincida se descarta el boton 2
avallejopo 0:2306789ed6f5 81 {
avallejopo 0:2306789ed6f5 82 flag2=0;
avallejopo 0:2306789ed6f5 83 }
avallejopo 0:2306789ed6f5 84 if(sec[i]!=boton3[i]) //en caso de que un bit no coincida se descarta el boton 3
avallejopo 0:2306789ed6f5 85 {
avallejopo 0:2306789ed6f5 86 flag3=0;
avallejopo 0:2306789ed6f5 87 }
avallejopo 0:2306789ed6f5 88 }
avallejopo 0:2306789ed6f5 89 if(flag1==1)
avallejopo 0:2306789ed6f5 90 {
avallejopo 0:2306789ed6f5 91 led3=1;
avallejopo 0:2306789ed6f5 92 led2=1;
avallejopo 0:2306789ed6f5 93 led=!led;
avallejopo 0:2306789ed6f5 94 lcd.cls(); // Borrar Pantalla
avallejopo 0:2306789ed6f5 95 lcd.locate(0,0);
avallejopo 0:2306789ed6f5 96 lcd.printf("Presionaste 1"); //si coincidieron todos los bits del boton 1
avallejopo 0:2306789ed6f5 97 }
avallejopo 0:2306789ed6f5 98 else if(flag2==1)
avallejopo 0:2306789ed6f5 99 {
avallejopo 0:2306789ed6f5 100 led3=1;
avallejopo 0:2306789ed6f5 101 led=1;
avallejopo 0:2306789ed6f5 102 led2=!led2;
avallejopo 0:2306789ed6f5 103 lcd.cls(); // Borrar Pantalla
avallejopo 0:2306789ed6f5 104 lcd.locate(0,0);
avallejopo 0:2306789ed6f5 105 lcd.printf("Presionaste 2"); //si coincidieron todos los bits del boton 1
avallejopo 0:2306789ed6f5 106 }
avallejopo 0:2306789ed6f5 107 else if(flag3==1)
avallejopo 0:2306789ed6f5 108 {
avallejopo 0:2306789ed6f5 109 led2=1;
avallejopo 0:2306789ed6f5 110 led=1;
avallejopo 0:2306789ed6f5 111 led3=!led3;
avallejopo 0:2306789ed6f5 112 lcd.cls(); // Borrar Pantalla
avallejopo 0:2306789ed6f5 113 lcd.locate(0,0);
avallejopo 0:2306789ed6f5 114 lcd.printf("Presionaste 3"); //si coincidieron todos los bits del boton 1
avallejopo 0:2306789ed6f5 115 }
avallejopo 0:2306789ed6f5 116 else
avallejopo 0:2306789ed6f5 117 {
avallejopo 0:2306789ed6f5 118 lcd.cls(); // Borrar Pantalla
avallejopo 0:2306789ed6f5 119 lcd.locate(0,0);
avallejopo 0:2306789ed6f5 120 lcd.printf("Presionaste otro boton"); //si coincidieron todos los bits del boton 1
avallejopo 0:2306789ed6f5 121 }
avallejopo 0:2306789ed6f5 122 }
avallejopo 0:2306789ed6f5 123 }
avallejopo 0:2306789ed6f5 124