![](/media/cache/profiles/53015ad3b6bbbf80a4d107e6ef603b1e.jpg.50x50_q85.jpg)
sensor irda + control remoto
Fork of irda1 by
Diff: main.cpp
- Revision:
- 3:56114a39ba7a
- Parent:
- 2:6a15ab0305c8
diff -r 6a15ab0305c8 -r 56114a39ba7a main.cpp --- a/main.cpp Fri Nov 08 07:40:04 2013 +0000 +++ b/main.cpp Wed Dec 04 03:25:22 2013 +0000 @@ -1,48 +1,100 @@ #include "mbed.h" -#include <Pulse1.h> +#include "Pulse1.h" + PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo Serial pc(USBTX, USBRX); -DigitalOut led(LED1); +DigitalOut led1(LED1); DigitalOut led2(LED2); +DigitalOut led3(LED3); int header =0; //tiempo de cabecera pulso abajo -const int head_H = 9100; //+20% medida con osciloscopio en microsegundos -const int head_L = 8500;//-20% medida con osciloscopio -int i=0; -const int T_alto=1680;//ponga su tiempo de la prueba -const int T_bajo=526;//ponga su tiempo de la prueba +const int head_H = 11100; //+20% medida con osciloscopio en microsegundos +const int head_L = 6400;//-20% medida con osciloscopio +int i=0,m,mb,mr; +//const int T_alto=1670;//ponga su tiempo de la prueba +//const int T_bajo=533;//ponga su tiempo de la prueba const int num_bits = 32;//ponga su numero de bits int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos int dato; // tiempo de cada dato que se lee - +int cadena[num_bits]; + +int cadenar[num_bits]={1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,1}; + +int cadenab[num_bits]={1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,1}; + +int cadenag[num_bits]={1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1}; + int main(){ +led1=1; +led2=1; +led3=1; while(1){ ini1: header=0; - led2=1; - led=1; + //led2=1; + //led=1; header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20% else goto ini1; seguir: //leo los datos de la trama y se meten a un arreglo - wait_us(5000); - led2=0; - for(i=0;i<(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos + // + //wait_us(5000); + //led2=0; + for(i=0;i<(num_bits);i++){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control - num[i]=dato; - wait_us(300); + num[i]=dato; + } + //pc.printf("numero[0] %d",num[0]); + for(i=0;i<(num_bits);i++){ + //if(num[i] > ((T_alto+T_bajo)/2)) { + if(num[i] > (1000)) { + cadena[i]=1; + pc.printf("1"); + wait_us(100); + } + else + { + cadena[i]=0; + pc.printf("0"); + wait_us(100); } - wait(0.5); //espero un poquito antes de leer todo el arreglo y ponerlo en pantalla - pc.printf(",%d",header); - for(i=0;i<(num_bits-1);++i){ - pc.printf(",%d",num[i]); + + } + // Compara dos cadenas + for(i=0;i<(num_bits);i++){ + if(cadena[i]!=cadenar[i]) + m=100; + } + if(m==32) { + pc.printf("rojo"); + led3=!led3; } - wait(0.1); //espero e imprimo en binario - pc.printf("\n\n"); - for(i=0;i<(num_bits-1);++i){ - if(num[i] > ((T_alto+T_bajo)/2)) pc.printf("1"); - else pc.printf("0"); + m=32; + + for(i=0;i<(num_bits);++i){ + if(cadena[i]!=cadenag[i]) + mr=100; + } + if(mr==32) { + pc.printf("verde"); + led2=!led2; + } + mr=32; + + + for(i=0;i<(num_bits);++i){ + if(cadena[i]!=cadenab[i]) + mb=100; + } + if(mb==32) { + pc.printf("azul"); + led1=!led1; + } + mb=32; + + + } } - } \ No newline at end of file + \ No newline at end of file