Código para prender, apagar y controlar un PWM con un control de televisor
Fork of irda_V_aula by
main.cpp
- Committer:
- GermanD
- Date:
- 2015-11-06
- Revision:
- 4:790b7fce49bd
- Parent:
- 3:82bebaf2a06a
File content as of revision 4:790b7fce49bd:
#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); // indica que oprimí un botón DigitalOut g1(PTD0); // salida para prender y apagar PwmOut p1(PTA13); // salida para PWM int header =0; //tiempo de cabecera pulso abajo const int head_H = 2400+2400*0.1; //+10% medida con osciloscopio en microsegundos const int head_L = 2400-2400*0.1;//-10% medida con osciloscopio int i=0; const int T_alto=586;//ponga su tiempo de la prueba const int T_bajo=1243;//ponga su tiempo de la prueba const int num_bits = 13;//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,rsubir,rbajar,conts,contb; // tiempo de cada dato que se lee int bot[12]; // variable para guardar la trama del botón int main(){ p1=0; rsubir=0; rbajar=0; conts=0; // contador para subir rapido contb=0; // contador para bajar rapido 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(333);// 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_low_us(); //leer un bit de datos que es pulso arriba en este control num[i]=dato; wait_us(300); } 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 pc.printf("\n\n"); for(i=0;i<(num_bits-1);++i){ if(num[i] > ((T_alto+T_bajo)/2)){ pc.printf("1"); bot[i] = 1; } else { pc.printf("0"); bot[i] = 0; } } int sol[]={1,0,1,0,0,1,1,1,0,0,0,0}; int arriba[]={0,0,1,0,1,1,1,1,0,0,0,0}; int abajo[]={1,0,1,0,1,1,1,1,0,0,0,0}; prender=0; subir=0; bajar=0; // comparo lo que me entra con el vector del botón for(i=0;i<=(num_bits-1);i++){ if(bot[i]==sol[i]){ prender++; } if(bot[i]==arriba[i]){ subir++; } if(bot[i]==abajo[i]){ bajar++; } } // para prender y apagar if (g1==0 && prender==12) g1=1; else if (g1==1 && prender==12) g1=0; // para subir y bajar if (subir==12 && p1<1){ if (p1>=1) p1=1; p1=p1+0.02; rsubir=1; rbajar=0; conts = conts++; if (conts>=3) conts=3; } if (bajar==12 && 0<p1){ if (p1<=0) p1=0; p1=p1-0.02; rsubir=0; rbajar=1; contb=contb++; if (contb>=3) contb=3; } // para subir y bajar mas rápido if(conts==3 && rsubir==1){ if (p1>=1) p1=1; p1=p1+0.08; } if(contb==3 && rbajar==1){ if (p1<=0) p1=0; p1=p1-0.08; } } }