Infrarojo
Dependencies: Pulse1 TextLCD mbed
main.cpp
00001 #include "mbed.h" 00002 #include <Pulse1.h> 00003 #include "TextLCD.h" 00004 00005 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 00006 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo 00007 Serial pc(USBTX, USBRX); 00008 DigitalOut led(LED1); 00009 DigitalOut led2(LED2); 00010 DigitalOut led3(LED3); 00011 00012 int header =0; //tiempo de cabecera pulso abajo 00013 const int head_H = 10884; //+20% medida con osciloscopio en microsegundos 00014 const int head_L = 7256;//-20% medida con osciloscopio 00015 int i=0; 00016 const int T_alto=1570;//ponga su tiempo de la prueba 00017 const int T_bajo=467;//ponga su tiempo de la prueba 00018 const int num_bits = 32;//ponga su numero de bits 00019 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos 00020 int sec[num_bits];//cadena para almacenar la cadena codificada en binario 00021 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}; 00022 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}; 00023 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}; 00024 int flag1,flag2,flag3; //Banderas de boton presionado 00025 int dato; // tiempo de cada dato que se lee 00026 00027 int main() 00028 { 00029 led3=1; 00030 led2=1; 00031 led=1; 00032 while(1) 00033 { 00034 ini1: 00035 header=0; 00036 header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo 00037 if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20% 00038 else goto ini1; 00039 00040 seguir: 00041 //leo los datos de la trama y se meten a un arreglo 00042 wait_us(2000); 00043 for(i=0; i<(num_bits-1); ++i) // POR OSCILOSCOPIO se determina que llegan (num_bits),datos 00044 { 00045 dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control 00046 num[i]=dato; 00047 wait_us(332); 00048 } 00049 //wait(0.5); //espero un poquito antes de leer todo el arreglo y ponerlo en pantalla 00050 pc.printf(",%d",header); 00051 for(i=0; i<num_bits; ++i) 00052 { 00053 pc.printf(",%d",num[i]); 00054 } 00055 //wait(0.1); //espero e imprimo en binario 00056 pc.printf("\n\n"); 00057 for(i=0; i<num_bits; ++i) 00058 { 00059 if(num[i] > ((T_alto+T_bajo)/2)) 00060 { 00061 pc.printf("1"); 00062 sec[i]=1; // guardo la secuancia en binario 00063 } 00064 else 00065 { 00066 sec[i]=0; //guardo la secuencia en binario 00067 pc.printf("0"); 00068 } 00069 } 00070 00071 flag1=1; 00072 flag2=1; 00073 flag3=1; 00074 for(i=0; i<32; ++i) 00075 { 00076 if(sec[i]!=boton1[i]) //en caso de que un bit no coincida se descarta el boton 1 00077 { 00078 flag1=0; 00079 } 00080 if(sec[i]!=boton2[i]) //en caso de que un bit no coincida se descarta el boton 2 00081 { 00082 flag2=0; 00083 } 00084 if(sec[i]!=boton3[i]) //en caso de que un bit no coincida se descarta el boton 3 00085 { 00086 flag3=0; 00087 } 00088 } 00089 if(flag1==1) 00090 { 00091 led3=1; 00092 led2=1; 00093 led=!led; 00094 lcd.cls(); // Borrar Pantalla 00095 lcd.locate(0,0); 00096 lcd.printf("Presionaste 1"); //si coincidieron todos los bits del boton 1 00097 } 00098 else if(flag2==1) 00099 { 00100 led3=1; 00101 led=1; 00102 led2=!led2; 00103 lcd.cls(); // Borrar Pantalla 00104 lcd.locate(0,0); 00105 lcd.printf("Presionaste 2"); //si coincidieron todos los bits del boton 1 00106 } 00107 else if(flag3==1) 00108 { 00109 led2=1; 00110 led=1; 00111 led3=!led3; 00112 lcd.cls(); // Borrar Pantalla 00113 lcd.locate(0,0); 00114 lcd.printf("Presionaste 3"); //si coincidieron todos los bits del boton 1 00115 } 00116 else 00117 { 00118 lcd.cls(); // Borrar Pantalla 00119 lcd.locate(0,0); 00120 lcd.printf("Presionaste otro boton"); //si coincidieron todos los bits del boton 1 00121 } 00122 } 00123 } 00124
Generated on Fri Jul 15 2022 15:47:49 by 1.7.2