Código para activar una válvula desde un control remoto.

Dependencies:   Pulse1 mbed

Committer:
gjusecheo
Date:
Wed Jun 01 15:24:28 2016 +0000
Revision:
0:b97d2520dd4d
Tarea control remoto

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gjusecheo 0:b97d2520dd4d 1 #include "mbed.h"
gjusecheo 0:b97d2520dd4d 2 #include <Pulse1.h>
gjusecheo 0:b97d2520dd4d 3
gjusecheo 0:b97d2520dd4d 4 //control remoto SAMSUNG
gjusecheo 0:b97d2520dd4d 5 PulseInOut irda(PTD7);// en este puerto se pone el sensor infrarrojo
gjusecheo 0:b97d2520dd4d 6 Serial pc(USBTX, USBRX);
gjusecheo 0:b97d2520dd4d 7 DigitalOut ab(PTD0);
gjusecheo 0:b97d2520dd4d 8 DigitalOut ce(PTD1);
gjusecheo 0:b97d2520dd4d 9
gjusecheo 0:b97d2520dd4d 10 int header =0; //tiempo de cabecera pulso abajo
gjusecheo 0:b97d2520dd4d 11 const int head_H = 4972; //+10% medida con osciloscopio en microsegundos
gjusecheo 0:b97d2520dd4d 12 const int head_L = 4068;//-10% medida con osciloscopio
gjusecheo 0:b97d2520dd4d 13 int i=0;
gjusecheo 0:b97d2520dd4d 14 const int T_alto = 1680;//ponga su tiempo de la prueba
gjusecheo 0:b97d2520dd4d 15 const int T_bajo = 640;//ponga su tiempo de la prueba
gjusecheo 0:b97d2520dd4d 16 const int num_bits = 32;//ponga su numero de bits
gjusecheo 0:b97d2520dd4d 17 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
gjusecheo 0:b97d2520dd4d 18 int dato; // tiempo de cada dato que se lee
gjusecheo 0:b97d2520dd4d 19 char v[num_bits]; // vector usado para guardar los datos del boton que se aprete
gjusecheo 0:b97d2520dd4d 20 char vi[num_bits]= {1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1}; // Codigo del boton ON, el cual se usara para encender o apagar la valvula
gjusecheo 0:b97d2520dd4d 21 int con; // Variable auxiliar
gjusecheo 0:b97d2520dd4d 22
gjusecheo 0:b97d2520dd4d 23 int main(){
gjusecheo 0:b97d2520dd4d 24 while(1){
gjusecheo 0:b97d2520dd4d 25 ini1: fflush( stdin );
gjusecheo 0:b97d2520dd4d 26 header=0;
gjusecheo 0:b97d2520dd4d 27 header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo en header
gjusecheo 0:b97d2520dd4d 28 if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-10%
gjusecheo 0:b97d2520dd4d 29 else goto ini1;
gjusecheo 0:b97d2520dd4d 30
gjusecheo 0:b97d2520dd4d 31 seguir:
gjusecheo 0:b97d2520dd4d 32 //leo los datos de la trama y se meten a un arreglo
gjusecheo 0:b97d2520dd4d 33 wait_us(4480);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO
gjusecheo 0:b97d2520dd4d 34 for(i=0;i<(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
gjusecheo 0:b97d2520dd4d 35 dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control
gjusecheo 0:b97d2520dd4d 36 num[i]=dato;
gjusecheo 0:b97d2520dd4d 37 wait_us(300); ////////////
gjusecheo 0:b97d2520dd4d 38 }
gjusecheo 0:b97d2520dd4d 39 wait(0.5); //espero un poquito luego de leer todo el arreglo y ponerlo en pantalla
gjusecheo 0:b97d2520dd4d 40 pc.printf("\n\n");
gjusecheo 0:b97d2520dd4d 41 for(i=0;i<(num_bits-1);++i){
gjusecheo 0:b97d2520dd4d 42 if(num[i] > ((T_alto+T_bajo)/2)){
gjusecheo 0:b97d2520dd4d 43 pc.printf("1");
gjusecheo 0:b97d2520dd4d 44 v[i]=1; // Guarda 1 en las posiciones del vector donde el pulso es alto
gjusecheo 0:b97d2520dd4d 45 }
gjusecheo 0:b97d2520dd4d 46 else {
gjusecheo 0:b97d2520dd4d 47 pc.printf("0");
gjusecheo 0:b97d2520dd4d 48 v[i]=0; // Guarda 0 en las posiciones del vector donde el pulso es bajo
gjusecheo 0:b97d2520dd4d 49 }
gjusecheo 0:b97d2520dd4d 50 }
gjusecheo 0:b97d2520dd4d 51 con=0;
gjusecheo 0:b97d2520dd4d 52 for (i=0; i<(num_bits-1);++i){
gjusecheo 0:b97d2520dd4d 53 if (vi[i]==v[i]){ // Comparación de los codigos
gjusecheo 0:b97d2520dd4d 54 con=con+1; // Si la posición de los vectores es igual aumenta el contador
gjusecheo 0:b97d2520dd4d 55 }
gjusecheo 0:b97d2520dd4d 56 }
gjusecheo 0:b97d2520dd4d 57 if (con==(num_bits-1)){ // Si el contador es igual al numero de bits, indica que la cadena es correcta
gjusecheo 0:b97d2520dd4d 58 ab=1;
gjusecheo 0:b97d2520dd4d 59 ce=0;
gjusecheo 0:b97d2520dd4d 60 pc.printf("\nAbriendo valvula\n");
gjusecheo 0:b97d2520dd4d 61 wait(6);
gjusecheo 0:b97d2520dd4d 62 ab=0;
gjusecheo 0:b97d2520dd4d 63 ce=1;
gjusecheo 0:b97d2520dd4d 64 pc.printf("Cerrando valvula\n");
gjusecheo 0:b97d2520dd4d 65 wait(2);
gjusecheo 0:b97d2520dd4d 66 ab=0;
gjusecheo 0:b97d2520dd4d 67 ce=0;
gjusecheo 0:b97d2520dd4d 68
gjusecheo 0:b97d2520dd4d 69 }
gjusecheo 0:b97d2520dd4d 70 else{ // Si el contador es diferente, la cadena es incorrecta
gjusecheo 0:b97d2520dd4d 71 ab=0;
gjusecheo 0:b97d2520dd4d 72 ce=0;
gjusecheo 0:b97d2520dd4d 73 pc.printf("\nTecla equivocada");
gjusecheo 0:b97d2520dd4d 74 }
gjusecheo 0:b97d2520dd4d 75 }
gjusecheo 0:b97d2520dd4d 76 }