compara los pulsos obtenidos de un control remoto.
Dependencies: irda_V_aula mbed
main.cpp@0:a0d94d4fc426, 2016-04-25 (annotated)
- Committer:
- SSJprocesa
- Date:
- Mon Apr 25 20:13:49 2016 +0000
- Revision:
- 0:a0d94d4fc426
obtener y comprar pulsos, control remoto;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
SSJprocesa | 0:a0d94d4fc426 | 1 | #include "mbed.h" |
SSJprocesa | 0:a0d94d4fc426 | 2 | #include <Pulse1.h> |
SSJprocesa | 0:a0d94d4fc426 | 3 | |
SSJprocesa | 0:a0d94d4fc426 | 4 | PulseInOut irda(PTD4);// en este puerto se pone el sensor infrarrojo |
SSJprocesa | 0:a0d94d4fc426 | 5 | Serial pc(USBTX, USBRX); |
SSJprocesa | 0:a0d94d4fc426 | 6 | DigitalOut led(LED1); |
SSJprocesa | 0:a0d94d4fc426 | 7 | DigitalOut led2(LED2); |
SSJprocesa | 0:a0d94d4fc426 | 8 | DigitalOut ledig(LED3); |
SSJprocesa | 0:a0d94d4fc426 | 9 | DigitalOut ds(PTA5); |
SSJprocesa | 0:a0d94d4fc426 | 10 | DigitalOut df(PTA4); |
SSJprocesa | 0:a0d94d4fc426 | 11 | |
SSJprocesa | 0:a0d94d4fc426 | 12 | |
SSJprocesa | 0:a0d94d4fc426 | 13 | int header =0; //tiempo de cabecera pulso abajo |
SSJprocesa | 0:a0d94d4fc426 | 14 | const int head_H = 2360*1.2; //+20% medida con osciloscopio en microsegundos |
SSJprocesa | 0:a0d94d4fc426 | 15 | const int head_L = 2360*0.8;//-20% medida con osciloscopio |
SSJprocesa | 0:a0d94d4fc426 | 16 | int i=0; |
SSJprocesa | 0:a0d94d4fc426 | 17 | const int T_alto=1200;//ponga su tiempo de la prueba |
SSJprocesa | 0:a0d94d4fc426 | 18 | const int T_bajo=560;//ponga su tiempo de la prueba |
SSJprocesa | 0:a0d94d4fc426 | 19 | const int num_bits = 12;//ponga su numero de bits |
SSJprocesa | 0:a0d94d4fc426 | 20 | int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos |
SSJprocesa | 0:a0d94d4fc426 | 21 | int nbina[num_bits]; |
SSJprocesa | 0:a0d94d4fc426 | 22 | int chan=0; |
SSJprocesa | 0:a0d94d4fc426 | 23 | int codig[12]= {0,0,1,0,0,0,0,0,1,1,1,0}; |
SSJprocesa | 0:a0d94d4fc426 | 24 | int dato; // tiempo de cada dato que se lee |
SSJprocesa | 0:a0d94d4fc426 | 25 | |
SSJprocesa | 0:a0d94d4fc426 | 26 | int main() |
SSJprocesa | 0:a0d94d4fc426 | 27 | { |
SSJprocesa | 0:a0d94d4fc426 | 28 | while(1) { |
SSJprocesa | 0:a0d94d4fc426 | 29 | ini1: |
SSJprocesa | 0:a0d94d4fc426 | 30 | header=0; |
SSJprocesa | 0:a0d94d4fc426 | 31 | chan=0; |
SSJprocesa | 0:a0d94d4fc426 | 32 | led2=1; |
SSJprocesa | 0:a0d94d4fc426 | 33 | led=1; |
SSJprocesa | 0:a0d94d4fc426 | 34 | ledig=1; |
SSJprocesa | 0:a0d94d4fc426 | 35 | header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo |
SSJprocesa | 0:a0d94d4fc426 | 36 | if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20% |
SSJprocesa | 0:a0d94d4fc426 | 37 | else goto ini1; |
SSJprocesa | 0:a0d94d4fc426 | 38 | |
SSJprocesa | 0:a0d94d4fc426 | 39 | seguir: |
SSJprocesa | 0:a0d94d4fc426 | 40 | //leo los datos de la trama y se meten a un arreglo |
SSJprocesa | 0:a0d94d4fc426 | 41 | wait_us(5000); |
SSJprocesa | 0:a0d94d4fc426 | 42 | for(i=0; i<=(num_bits-1); ++i) { // POR OSCILOSCOPIO se determina que llegan (num_bits),datos |
SSJprocesa | 0:a0d94d4fc426 | 43 | dato = irda.read_low_us(); //leer un bit de datos que es pulso arriba en este control |
SSJprocesa | 0:a0d94d4fc426 | 44 | num[i]=dato; |
SSJprocesa | 0:a0d94d4fc426 | 45 | wait_us(300); |
SSJprocesa | 0:a0d94d4fc426 | 46 | } |
SSJprocesa | 0:a0d94d4fc426 | 47 | wait(0.5); //espero un poquito antes de leer todo el arreglo y ponerlo en pantalla |
SSJprocesa | 0:a0d94d4fc426 | 48 | pc.printf(",%d",header); |
SSJprocesa | 0:a0d94d4fc426 | 49 | for(i=0; i<=(num_bits-1); ++i) { |
SSJprocesa | 0:a0d94d4fc426 | 50 | pc.printf(",%d",num[i]); |
SSJprocesa | 0:a0d94d4fc426 | 51 | } |
SSJprocesa | 0:a0d94d4fc426 | 52 | wait(0.1); //espero e imprimo en binario |
SSJprocesa | 0:a0d94d4fc426 | 53 | pc.printf("\n\n"); |
SSJprocesa | 0:a0d94d4fc426 | 54 | for(i=0; i<=(num_bits-1); ++i) { |
SSJprocesa | 0:a0d94d4fc426 | 55 | if(num[i] > ((T_alto+T_bajo)/2)) { |
SSJprocesa | 0:a0d94d4fc426 | 56 | nbina[i]=1; |
SSJprocesa | 0:a0d94d4fc426 | 57 | pc.printf("%d",nbina[i]); |
SSJprocesa | 0:a0d94d4fc426 | 58 | } else { |
SSJprocesa | 0:a0d94d4fc426 | 59 | nbina[i]=0; |
SSJprocesa | 0:a0d94d4fc426 | 60 | pc.printf("%d",nbina[i]); |
SSJprocesa | 0:a0d94d4fc426 | 61 | |
SSJprocesa | 0:a0d94d4fc426 | 62 | } |
SSJprocesa | 0:a0d94d4fc426 | 63 | } |
SSJprocesa | 0:a0d94d4fc426 | 64 | |
SSJprocesa | 0:a0d94d4fc426 | 65 | pc.printf("\n"); |
SSJprocesa | 0:a0d94d4fc426 | 66 | for(i=0; i<=(num_bits-1); ++i) { |
SSJprocesa | 0:a0d94d4fc426 | 67 | pc.printf("%d",codig[i]); |
SSJprocesa | 0:a0d94d4fc426 | 68 | |
SSJprocesa | 0:a0d94d4fc426 | 69 | if(codig[i]==nbina[i]) { |
SSJprocesa | 0:a0d94d4fc426 | 70 | chan++; |
SSJprocesa | 0:a0d94d4fc426 | 71 | } |
SSJprocesa | 0:a0d94d4fc426 | 72 | } |
SSJprocesa | 0:a0d94d4fc426 | 73 | if(chan==12) { |
SSJprocesa | 0:a0d94d4fc426 | 74 | ds=1;df=0; |
SSJprocesa | 0:a0d94d4fc426 | 75 | wait(1); |
SSJprocesa | 0:a0d94d4fc426 | 76 | ds=0;df=0;led2=0;pc.printf("\nValvula On\n"); |
SSJprocesa | 0:a0d94d4fc426 | 77 | wait(5); |
SSJprocesa | 0:a0d94d4fc426 | 78 | ds=0;df=1; |
SSJprocesa | 0:a0d94d4fc426 | 79 | wait(1); |
SSJprocesa | 0:a0d94d4fc426 | 80 | ds=0;df=0;ledig=0;led2=1;pc.printf("Valvula Off\n"); |
SSJprocesa | 0:a0d94d4fc426 | 81 | wait(2); |
SSJprocesa | 0:a0d94d4fc426 | 82 | } |
SSJprocesa | 0:a0d94d4fc426 | 83 | |
SSJprocesa | 0:a0d94d4fc426 | 84 | } |
SSJprocesa | 0:a0d94d4fc426 | 85 | } |