gabriel jaime useche ossa
/
Tarea_Control_Remoto
Código para activar una válvula desde un control remoto.
main.cpp@0:b97d2520dd4d, 2016-06-01 (annotated)
- Committer:
- gjusecheo
- Date:
- Wed Jun 01 15:24:28 2016 +0000
- Revision:
- 0:b97d2520dd4d
Tarea control remoto
Who changed what in which revision?
User | Revision | Line number | New 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 | } |