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