Código para prender, apagar y controlar un PWM con un control de televisor

Dependencies:   Pulse1 mbed

Fork of irda_V_aula by Gustavo Ramirez

Committer:
GermanD
Date:
Fri Nov 06 21:01:23 2015 +0000
Revision:
4:790b7fce49bd
Parent:
3:82bebaf2a06a
C?digo para prender y apagar un pwm y controlarlo con las teclas de un control de tv.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tony63 0:74d57f8ae247 1 #include "mbed.h"
tony63 0:74d57f8ae247 2 #include <Pulse1.h>
GermanD 4:790b7fce49bd 3 #include <string.h>
tony63 3:82bebaf2a06a 4 //control remoto videobeam aula
tony63 2:6a15ab0305c8 5 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
tony63 0:74d57f8ae247 6 Serial pc(USBTX, USBRX);
GermanD 4:790b7fce49bd 7 DigitalOut led(LED1); // indica que oprimí un botón
GermanD 4:790b7fce49bd 8 DigitalOut g1(PTD0); // salida para prender y apagar
GermanD 4:790b7fce49bd 9 PwmOut p1(PTA13); // salida para PWM
GermanD 4:790b7fce49bd 10
tony63 2:6a15ab0305c8 11 int header =0; //tiempo de cabecera pulso abajo
GermanD 4:790b7fce49bd 12 const int head_H = 2400+2400*0.1; //+10% medida con osciloscopio en microsegundos
GermanD 4:790b7fce49bd 13 const int head_L = 2400-2400*0.1;//-10% medida con osciloscopio
tony63 2:6a15ab0305c8 14 int i=0;
GermanD 4:790b7fce49bd 15 const int T_alto=586;//ponga su tiempo de la prueba
GermanD 4:790b7fce49bd 16 const int T_bajo=1243;//ponga su tiempo de la prueba
GermanD 4:790b7fce49bd 17 const int num_bits = 13;//ponga su numero de bits
tony63 2:6a15ab0305c8 18 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
GermanD 4:790b7fce49bd 19 int dato,prender,subir,bajar,rsubir,rbajar,conts,contb; // tiempo de cada dato que se lee
GermanD 4:790b7fce49bd 20 int bot[12]; // variable para guardar la trama del botón
GermanD 4:790b7fce49bd 21
tony63 0:74d57f8ae247 22
tony63 0:74d57f8ae247 23 int main(){
GermanD 4:790b7fce49bd 24 p1=0;
GermanD 4:790b7fce49bd 25 rsubir=0;
GermanD 4:790b7fce49bd 26 rbajar=0;
GermanD 4:790b7fce49bd 27 conts=0; // contador para subir rapido
GermanD 4:790b7fce49bd 28 contb=0; // contador para bajar rapido
GermanD 4:790b7fce49bd 29
tony63 0:74d57f8ae247 30 while(1){
tony63 3:82bebaf2a06a 31 ini1: fflush( stdin );
tony63 3:82bebaf2a06a 32 header=0;
tony63 0:74d57f8ae247 33 led=1;
tony63 3:82bebaf2a06a 34 header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo en header
tony63 2:6a15ab0305c8 35 if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20%
tony63 2:6a15ab0305c8 36 else goto ini1;
tony63 0:74d57f8ae247 37
tony63 2:6a15ab0305c8 38 seguir:
tony63 2:6a15ab0305c8 39 //leo los datos de la trama y se meten a un arreglo
GermanD 4:790b7fce49bd 40 wait_us(333);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO
GermanD 4:790b7fce49bd 41 led=0;
tony63 2:6a15ab0305c8 42 for(i=0;i<(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
GermanD 4:790b7fce49bd 43 dato = irda.read_low_us(); //leer un bit de datos que es pulso arriba en este control
tony63 2:6a15ab0305c8 44 num[i]=dato;
tony63 2:6a15ab0305c8 45 wait_us(300);
tony63 2:6a15ab0305c8 46 }
tony63 3:82bebaf2a06a 47 wait(0.5); //espero un poquito luego de leer todo el arreglo y ponerlo en pantalla
tony63 2:6a15ab0305c8 48 pc.printf(",%d",header);
tony63 2:6a15ab0305c8 49 for(i=0;i<(num_bits-1);++i){
tony63 2:6a15ab0305c8 50 pc.printf(",%d",num[i]);
tony63 2:6a15ab0305c8 51 }
GermanD 4:790b7fce49bd 52 //wait(0.1); //espero e imprimo en binario
tony63 2:6a15ab0305c8 53 pc.printf("\n\n");
tony63 2:6a15ab0305c8 54 for(i=0;i<(num_bits-1);++i){
GermanD 4:790b7fce49bd 55 if(num[i] > ((T_alto+T_bajo)/2)){
GermanD 4:790b7fce49bd 56
GermanD 4:790b7fce49bd 57 pc.printf("1");
GermanD 4:790b7fce49bd 58 bot[i] = 1;
GermanD 4:790b7fce49bd 59 }
GermanD 4:790b7fce49bd 60
GermanD 4:790b7fce49bd 61 else {
GermanD 4:790b7fce49bd 62 pc.printf("0");
GermanD 4:790b7fce49bd 63 bot[i] = 0;
tony63 2:6a15ab0305c8 64 }
tony63 2:6a15ab0305c8 65 }
GermanD 4:790b7fce49bd 66
GermanD 4:790b7fce49bd 67 int sol[]={1,0,1,0,0,1,1,1,0,0,0,0};
GermanD 4:790b7fce49bd 68 int arriba[]={0,0,1,0,1,1,1,1,0,0,0,0};
GermanD 4:790b7fce49bd 69 int abajo[]={1,0,1,0,1,1,1,1,0,0,0,0};
GermanD 4:790b7fce49bd 70 prender=0;
GermanD 4:790b7fce49bd 71 subir=0;
GermanD 4:790b7fce49bd 72 bajar=0;
GermanD 4:790b7fce49bd 73
GermanD 4:790b7fce49bd 74 // comparo lo que me entra con el vector del botón
GermanD 4:790b7fce49bd 75 for(i=0;i<=(num_bits-1);i++){
GermanD 4:790b7fce49bd 76 if(bot[i]==sol[i]){
GermanD 4:790b7fce49bd 77
GermanD 4:790b7fce49bd 78 prender++;
GermanD 4:790b7fce49bd 79 }
GermanD 4:790b7fce49bd 80 if(bot[i]==arriba[i]){
GermanD 4:790b7fce49bd 81
GermanD 4:790b7fce49bd 82 subir++;
GermanD 4:790b7fce49bd 83 }
GermanD 4:790b7fce49bd 84 if(bot[i]==abajo[i]){
GermanD 4:790b7fce49bd 85
GermanD 4:790b7fce49bd 86 bajar++;
GermanD 4:790b7fce49bd 87 }
GermanD 4:790b7fce49bd 88
GermanD 4:790b7fce49bd 89
GermanD 4:790b7fce49bd 90 }
GermanD 4:790b7fce49bd 91
GermanD 4:790b7fce49bd 92 // para prender y apagar
GermanD 4:790b7fce49bd 93 if (g1==0 && prender==12) g1=1;
GermanD 4:790b7fce49bd 94 else if (g1==1 && prender==12) g1=0;
GermanD 4:790b7fce49bd 95
GermanD 4:790b7fce49bd 96
GermanD 4:790b7fce49bd 97 // para subir y bajar
GermanD 4:790b7fce49bd 98 if (subir==12 && p1<1){
GermanD 4:790b7fce49bd 99 if (p1>=1) p1=1;
GermanD 4:790b7fce49bd 100 p1=p1+0.02;
GermanD 4:790b7fce49bd 101 rsubir=1;
GermanD 4:790b7fce49bd 102 rbajar=0;
GermanD 4:790b7fce49bd 103 conts = conts++;
GermanD 4:790b7fce49bd 104 if (conts>=3) conts=3;
GermanD 4:790b7fce49bd 105 }
GermanD 4:790b7fce49bd 106
GermanD 4:790b7fce49bd 107 if (bajar==12 && 0<p1){
GermanD 4:790b7fce49bd 108 if (p1<=0) p1=0;
GermanD 4:790b7fce49bd 109 p1=p1-0.02;
GermanD 4:790b7fce49bd 110 rsubir=0;
GermanD 4:790b7fce49bd 111 rbajar=1;
GermanD 4:790b7fce49bd 112 contb=contb++;
GermanD 4:790b7fce49bd 113 if (contb>=3) contb=3;
GermanD 4:790b7fce49bd 114 }
GermanD 4:790b7fce49bd 115
GermanD 4:790b7fce49bd 116
GermanD 4:790b7fce49bd 117 // para subir y bajar mas rápido
GermanD 4:790b7fce49bd 118 if(conts==3 && rsubir==1){
GermanD 4:790b7fce49bd 119 if (p1>=1) p1=1;
GermanD 4:790b7fce49bd 120 p1=p1+0.08;
GermanD 4:790b7fce49bd 121 }
GermanD 4:790b7fce49bd 122 if(contb==3 && rbajar==1){
GermanD 4:790b7fce49bd 123 if (p1<=0) p1=0;
GermanD 4:790b7fce49bd 124 p1=p1-0.08;
GermanD 4:790b7fce49bd 125 }
GermanD 4:790b7fce49bd 126
GermanD 4:790b7fce49bd 127 }
tony63 2:6a15ab0305c8 128 }