Reconocimiento de teclas, Control SONY se iluminan leds con la tecla indicada, Power, CH+, CH-

Dependencies:   Pulse1 TextLCD mbed

Committer:
walterg
Date:
Thu May 22 23:41:49 2014 +0000
Revision:
0:59d03f6b5b6e
Tarea_6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
walterg 0:59d03f6b5b6e 1 // Walter Giraldo Gonzalez
walterg 0:59d03f6b5b6e 2 // Gregorio Velasquez Gomez
walterg 0:59d03f6b5b6e 3
walterg 0:59d03f6b5b6e 4 #include "mbed.h"
walterg 0:59d03f6b5b6e 5 #include <Pulse1.h>
walterg 0:59d03f6b5b6e 6 #include "TextLCD.h"
walterg 0:59d03f6b5b6e 7
walterg 0:59d03f6b5b6e 8
walterg 0:59d03f6b5b6e 9 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7#include "TextLCD.h"
walterg 0:59d03f6b5b6e 10 //control remoto videobeam aula
walterg 0:59d03f6b5b6e 11 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
walterg 0:59d03f6b5b6e 12 DigitalOut led(LED1);
walterg 0:59d03f6b5b6e 13 DigitalOut led2(LED2);
walterg 0:59d03f6b5b6e 14 DigitalOut led3(LED3);
walterg 0:59d03f6b5b6e 15
walterg 0:59d03f6b5b6e 16 int header =2470; //tiempo de cabecera pulso abajo
walterg 0:59d03f6b5b6e 17 const int head_H = 2470+247; //+10% medida con osciloscopio en microsegundos
walterg 0:59d03f6b5b6e 18 const int head_L = 2470-247;//-10% medida con osciloscopio
walterg 0:59d03f6b5b6e 19 const int Te=400;
walterg 0:59d03f6b5b6e 20 int i=0;
walterg 0:59d03f6b5b6e 21 const int T_alto=1270;//1630;//ponga su tiempo de la prueba
walterg 0:59d03f6b5b6e 22 const int T_bajo=667;//533;//ponga su tiempo de la prueba
walterg 0:59d03f6b5b6e 23 const int num_bits = 16;//ponga su numero de bits
walterg 0:59d03f6b5b6e 24 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
walterg 0:59d03f6b5b6e 25
walterg 0:59d03f6b5b6e 26 int Tecla=0;
walterg 0:59d03f6b5b6e 27 const int power=54;
walterg 0:59d03f6b5b6e 28 const int CHA=28;
walterg 0:59d03f6b5b6e 29 const int CHB=40;
walterg 0:59d03f6b5b6e 30
walterg 0:59d03f6b5b6e 31 int dato; // tiempo de cada dato que se lee
walterg 0:59d03f6b5b6e 32
walterg 0:59d03f6b5b6e 33 int main()
walterg 0:59d03f6b5b6e 34 {
walterg 0:59d03f6b5b6e 35
walterg 0:59d03f6b5b6e 36 led=1;
walterg 0:59d03f6b5b6e 37 led2=1;
walterg 0:59d03f6b5b6e 38 led3=1;
walterg 0:59d03f6b5b6e 39 while(1)
walterg 0:59d03f6b5b6e 40 {
walterg 0:59d03f6b5b6e 41 lcd.cls();
walterg 0:59d03f6b5b6e 42 lcd.locate(0,0);
walterg 0:59d03f6b5b6e 43 lcd.printf("PRESIONE BOTON");
walterg 0:59d03f6b5b6e 44
walterg 0:59d03f6b5b6e 45 ini1: fflush( stdin );
walterg 0:59d03f6b5b6e 46 header=0;
walterg 0:59d03f6b5b6e 47 header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo en header
walterg 0:59d03f6b5b6e 48 if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20%
walterg 0:59d03f6b5b6e 49 else goto ini1;
walterg 0:59d03f6b5b6e 50
walterg 0:59d03f6b5b6e 51 seguir:
walterg 0:59d03f6b5b6e 52 //leo los datos de la trama y se meten a un arreglo
walterg 0:59d03f6b5b6e 53 wait_us(2417);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO
walterg 0:59d03f6b5b6e 54 //led2=0;
walterg 0:59d03f6b5b6e 55 lcd.cls();
walterg 0:59d03f6b5b6e 56 Tecla=0;
walterg 0:59d03f6b5b6e 57 for(i=0;i<(num_bits-1);++i)
walterg 0:59d03f6b5b6e 58 { // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
walterg 0:59d03f6b5b6e 59 dato = irda.read_low_us(); //leer un bit de datos que es pulso arriba en este control
walterg 0:59d03f6b5b6e 60 num[i]=dato;
walterg 0:59d03f6b5b6e 61 wait_us(Te);
walterg 0:59d03f6b5b6e 62 }
walterg 0:59d03f6b5b6e 63 wait(0.3); //espero un poquito luego de leer todo el arreglo y ponerlo en pantalla
walterg 0:59d03f6b5b6e 64
walterg 0:59d03f6b5b6e 65 for(i=0;i<(num_bits-1);++i)
walterg 0:59d03f6b5b6e 66 {
walterg 0:59d03f6b5b6e 67
walterg 0:59d03f6b5b6e 68 if(num[i] > ((T_alto+T_bajo)/2))
walterg 0:59d03f6b5b6e 69 {
walterg 0:59d03f6b5b6e 70 Tecla=Tecla+ (2^(i));// ecuación que me caracterizara cada tecla es un acumulado el cual podre usar para comparar
walterg 0:59d03f6b5b6e 71 }
walterg 0:59d03f6b5b6e 72
walterg 0:59d03f6b5b6e 73 }
walterg 0:59d03f6b5b6e 74 if(Tecla==power) //Comparación de el acumulado "tecla ", con el acumulado que tiene la tecla power que corresponde a la tecla POWER
walterg 0:59d03f6b5b6e 75 { led=!led;
walterg 0:59d03f6b5b6e 76 lcd.cls();
walterg 0:59d03f6b5b6e 77 lcd.printf("POWER");
walterg 0:59d03f6b5b6e 78 lcd.locate(0,1);
walterg 0:59d03f6b5b6e 79 lcd.printf("Acumulado=%d",Tecla);
walterg 0:59d03f6b5b6e 80 wait(2);
walterg 0:59d03f6b5b6e 81 lcd.cls();
walterg 0:59d03f6b5b6e 82 lcd.locate(0,0);
walterg 0:59d03f6b5b6e 83 lcd.printf("HH:%d",head_H);
walterg 0:59d03f6b5b6e 84 lcd.locate(8,0);
walterg 0:59d03f6b5b6e 85 lcd.printf("Tby:%d",Te);
walterg 0:59d03f6b5b6e 86 lcd.locate(0,1);
walterg 0:59d03f6b5b6e 87 lcd.printf("HL:%d",head_L);
walterg 0:59d03f6b5b6e 88 lcd.locate(8,1);
walterg 0:59d03f6b5b6e 89 lcd.printf("Nby:%d",num_bits);
walterg 0:59d03f6b5b6e 90 wait(2);
walterg 0:59d03f6b5b6e 91 Tecla=0;
walterg 0:59d03f6b5b6e 92 }
walterg 0:59d03f6b5b6e 93 if(Tecla==CHA)
walterg 0:59d03f6b5b6e 94 {
walterg 0:59d03f6b5b6e 95 led2=!led2;
walterg 0:59d03f6b5b6e 96 lcd.cls();
walterg 0:59d03f6b5b6e 97 lcd.printf("Boton CH +");
walterg 0:59d03f6b5b6e 98 lcd.locate(0,1);
walterg 0:59d03f6b5b6e 99 lcd.printf("Acumulado=%d",Tecla);
walterg 0:59d03f6b5b6e 100 wait(2);
walterg 0:59d03f6b5b6e 101 lcd.cls();
walterg 0:59d03f6b5b6e 102 lcd.locate(0,0);
walterg 0:59d03f6b5b6e 103 lcd.printf("HH:%d",head_H);
walterg 0:59d03f6b5b6e 104 lcd.locate(8,0);
walterg 0:59d03f6b5b6e 105 lcd.printf("Tby:%d",Te);
walterg 0:59d03f6b5b6e 106 lcd.locate(0,1);
walterg 0:59d03f6b5b6e 107 lcd.printf("HL:%d",head_L);
walterg 0:59d03f6b5b6e 108 lcd.locate(8,1);
walterg 0:59d03f6b5b6e 109 lcd.printf("Nby:%d",num_bits);
walterg 0:59d03f6b5b6e 110 Tecla=0;
walterg 0:59d03f6b5b6e 111 wait(2);
walterg 0:59d03f6b5b6e 112 }
walterg 0:59d03f6b5b6e 113 if(Tecla==CHB)
walterg 0:59d03f6b5b6e 114 {
walterg 0:59d03f6b5b6e 115
walterg 0:59d03f6b5b6e 116 led3=!led3;
walterg 0:59d03f6b5b6e 117 lcd.cls();
walterg 0:59d03f6b5b6e 118 lcd.printf("Boton CH -");
walterg 0:59d03f6b5b6e 119 lcd.locate(0,1);
walterg 0:59d03f6b5b6e 120 lcd.printf("Acumulado=%d",Tecla);
walterg 0:59d03f6b5b6e 121 wait(2);
walterg 0:59d03f6b5b6e 122 lcd.cls();
walterg 0:59d03f6b5b6e 123 lcd.locate(0,0);
walterg 0:59d03f6b5b6e 124 lcd.printf("HH:%d",head_H);
walterg 0:59d03f6b5b6e 125 lcd.locate(8,0);
walterg 0:59d03f6b5b6e 126 lcd.printf("Tby:%d",Te);
walterg 0:59d03f6b5b6e 127 lcd.locate(0,1);
walterg 0:59d03f6b5b6e 128 lcd.printf("HL:%d",head_L);
walterg 0:59d03f6b5b6e 129 lcd.locate(8,1);
walterg 0:59d03f6b5b6e 130 lcd.printf("Nby:%d",num_bits);
walterg 0:59d03f6b5b6e 131 Tecla=0;
walterg 0:59d03f6b5b6e 132 wait(2);
walterg 0:59d03f6b5b6e 133 }
walterg 0:59d03f6b5b6e 134 if ((Tecla!=CHB)&&(Tecla!=CHA)&&(Tecla!=power)&&(Tecla!=0)){
walterg 0:59d03f6b5b6e 135 lcd.cls();
walterg 0:59d03f6b5b6e 136 lcd.printf("Boton incorrecto");
walterg 0:59d03f6b5b6e 137 lcd.locate(0,1);
walterg 0:59d03f6b5b6e 138 lcd.printf("Acumulado=%d",Tecla);
walterg 0:59d03f6b5b6e 139 wait(2);
walterg 0:59d03f6b5b6e 140 lcd.cls();
walterg 0:59d03f6b5b6e 141 lcd.locate(0,0);
walterg 0:59d03f6b5b6e 142 lcd.printf("HH:%d",head_H);
walterg 0:59d03f6b5b6e 143 lcd.locate(8,0);
walterg 0:59d03f6b5b6e 144 lcd.printf("Tby:%d",Te);
walterg 0:59d03f6b5b6e 145 lcd.locate(0,1);
walterg 0:59d03f6b5b6e 146 lcd.printf("HL:%d",head_L);
walterg 0:59d03f6b5b6e 147 lcd.locate(8,1);
walterg 0:59d03f6b5b6e 148 lcd.printf("Nby:%d",num_bits);
walterg 0:59d03f6b5b6e 149 Tecla=0;
walterg 0:59d03f6b5b6e 150 wait(2);}
walterg 0:59d03f6b5b6e 151 }
walterg 0:59d03f6b5b6e 152 }