![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Encendido y apagado de un led + PWM controlado por medio de un control infrarrojo
Fork of irda_V_aula by
Revision 4:b20c69cb1290, committed 2015-10-27
- Comitter:
- demo71
- Date:
- Tue Oct 27 01:12:37 2015 +0000
- Parent:
- 3:82bebaf2a06a
- Commit message:
- Encendido y apagado de un led mediante control de infrarrojo
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Thu May 08 00:38:39 2014 +0000 +++ b/main.cpp Tue Oct 27 01:12:37 2015 +0000 @@ -1,25 +1,38 @@ #include "mbed.h" #include <Pulse1.h> +#include <string.h> //control remoto videobeam aula PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo Serial pc(USBTX, USBRX); DigitalOut led(LED1); -DigitalOut led2(LED2); +DigitalOut s1(PTA13); +PwmOut pwm1(PTD0); + + int header =0; //tiempo de cabecera pulso abajo -const int head_H = 9120; //+10% medida con osciloscopio en microsegundos -const int head_L = 8939;//-10% medida con osciloscopio +const int head_H = 9070 + 9070*0.2; //+10% medida con osciloscopio en microsegundos +const int head_L = 9070 - 9070*0.2;//-10% medida con osciloscopio int i=0; -const int T_alto=1630;//ponga su tiempo de la prueba -const int T_bajo=533;//ponga su tiempo de la prueba -const int num_bits = 64;//ponga su numero de bits +const int T_alto=1650;//ponga su tiempo de la prueba +const int T_bajo=523;//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 dato,prender,subir,bajar,holdsubir,holdbajar,holdvect,k; // tiempo de cada dato que se lee +int aux[32]; + + + + int main(){ +pwm1=0; +holdsubir=0; +holdbajar=0; while(1){ -ini1: fflush( stdin ); + +ini1: + fflush( stdin ); header=0; - led2=1; led=1; header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo en header if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20% @@ -27,23 +40,139 @@ seguir: //leo los datos de la trama y se meten a un arreglo - wait_us(4500);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO - led2=0; + wait_us(4000);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO + led=0; for(i=0;i<(num_bits-1);++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); + wait_us(450); //Tiempo de Espera } - wait(0.5); //espero un poquito luego de leer todo el arreglo y ponerlo en pantalla + //wait(0.5); //espero un poquito luego de leer todo el arreglo y ponerlo en pantalla pc.printf(",%d",header); - for(i=0;i<(num_bits-1);++i){ + for(i=0;i<=(num_bits-1);++i){ pc.printf(",%d",num[i]); } - wait(0.1); //espero e imprimo en binario + //wait(0.1); //espero e imprimo en binario + led=1; 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"); + + for(i=0;i<=(num_bits-1);i++){ + + if(num[i] > ((T_alto+T_bajo)/2)){ + pc.printf("1"); + //if(i >=16){ + + aux[i]=1; + //cont++; + //} + + } + else { + pc.printf("0"); + //if(i >=16){ + aux[i]=0; + //cont++; + //} + + + } + + // + } + + int power[]={0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,1,0}; + int uno[] ={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}; + int cuatro[]={0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,0}; + int hold[]= {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0}; + prender=0; + subir=0; + bajar=0; + holdvect=0; + for(i=0;i<=(num_bits-1);i++){ + if(aux[i]==power[i]){ + + prender++; + } + if(aux[i]==uno[i]){ + + subir++; + } + if(aux[i]==cuatro[i]){ + + bajar++; + } + if(aux[i]==hold[i]){ + + holdvect++; + } + + } + + if (s1==0 && prender==32) s1=1; + else if (s1==1 && prender==32) s1=0; + + + if (subir==32 && pwm1<1){ + if (pwm1>=1) pwm1=1; + pwm1=pwm1+0.02; + holdsubir=1; + holdbajar=0; + } + + if (bajar==32 && 0<pwm1){ + if (pwm1<=0) pwm1=0; + pwm1=pwm1-0.02; + holdsubir=0; + holdbajar=1; + } + + if(holdvect==32 && holdsubir==1){ + if (pwm1>=1) pwm1=1; + pwm1=pwm1+0.08; + } + if(holdvect==32 && holdbajar==1){ + if (pwm1<=0) pwm1=0; + pwm1=pwm1-0.08; + } + + + /* + aux[32]='\0'; + int accion; + if (strcmp(acc1,aux)==0){ + s1=1; + accion = 1; + pc.printf("uno"); + } + else if (strcmp("0100000010111110",aux)==0){ + accion = 2; + pc.printf("dos"); + } + else if (strcmp("1100000000111110",aux)==0){ + accion = 3; + pc.printf("tres"); + } + + else + accion = 0; + //aux[16]="\0"; + */ + //pc.printf(accion); + //pc.printf(conv(aux)); + //k=conv(aux); + //if(k==1) pc.printf("APAGAR"); + //if(k==2) pc.printf("SUBIR"); + //if(k==3) pc.printf("BAJAR"); + //if(k==0) pc.printf("NADA"); + /* + float i; + for(i=0.0;i<1.0;i+=0.05){ + led2=i; + wait(0.2); + } + led2=0; + led=0; + wait(1); */ } } \ No newline at end of file