Encendido y apagado de un led + PWM controlado por medio de un control infrarrojo
Fork of irda_V_aula by
main.cpp
- Committer:
- demo71
- Date:
- 2015-10-27
- Revision:
- 4:b20c69cb1290
- Parent:
- 3:82bebaf2a06a
File content as of revision 4:b20c69cb1290:
#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 s1(PTA13); PwmOut pwm1(PTD0); int header =0; //tiempo de cabecera pulso abajo 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=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,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 ); header=0; 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% else goto ini1; seguir: //leo los datos de la trama y se meten a un arreglo 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(450); //Tiempo de Espera } //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){ pc.printf(",%d",num[i]); } //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"); //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); */ } }