infrarojo con control remoto muestra en LCD header, tiempo de bits, y la coversion hexadecimal

Dependencies:   Debounced Pulse1 TextLCD mbed

Fork of irda1 by Gustavo Ramirez

Committer:
asjgrupo4
Date:
Wed Apr 29 04:37:53 2015 +0000
Revision:
3:53709a42c328
Parent:
2:6a15ab0305c8
Child:
4:e48988084c6d
infrarojo con control remoto muestra en LCD header, tiempo de bits, y la coversion hexadecimal

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tony63 0:74d57f8ae247 1 #include "mbed.h"
asjgrupo4 3:53709a42c328 2 #include "DebouncedIn.h"
tony63 0:74d57f8ae247 3 #include <Pulse1.h>
asjgrupo4 3:53709a42c328 4 #include "TextLCD.h"
asjgrupo4 3:53709a42c328 5 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
tony63 2:6a15ab0305c8 6 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
tony63 0:74d57f8ae247 7 Serial pc(USBTX, USBRX);
tony63 0:74d57f8ae247 8 DigitalOut led(LED1);
tony63 2:6a15ab0305c8 9 DigitalOut led2(LED2);
asjgrupo4 3:53709a42c328 10 DebouncedIn button1(PTC12); //incrementar
asjgrupo4 3:53709a42c328 11 DebouncedIn button2(PTC13);//decrementar
asjgrupo4 3:53709a42c328 12 DebouncedIn button3(PTC16);//salir
asjgrupo4 3:53709a42c328 13 // todos los valores estan en microsegundos
asjgrupo4 3:53709a42c328 14 int header =13560; //tiempo de cabecera pulso abajo
asjgrupo4 3:53709a42c328 15 const int head_H = 10836; //+20% medida con osciloscopio en microsegundos
asjgrupo4 3:53709a42c328 16 const int head_L = 3624;//-20% medida con osciloscopio
tony63 2:6a15ab0305c8 17 int i=0;
asjgrupo4 3:53709a42c328 18 int j=0;
asjgrupo4 3:53709a42c328 19 int cont=0,k=0,h=0,c=0,hexa=0,pot=0,otra=0;
asjgrupo4 3:53709a42c328 20 int hexadeci[8];
asjgrupo4 3:53709a42c328 21 //double pot=0;
asjgrupo4 3:53709a42c328 22 const int T_alto=1700;//ponga su tiempo de la prueba
asjgrupo4 3:53709a42c328 23 const int T_bajo=600;//ponga su tiempo de la prueba
tony63 2:6a15ab0305c8 24 const int num_bits = 32;//ponga su numero de bits
tony63 2:6a15ab0305c8 25 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
tony63 2:6a15ab0305c8 26 int dato; // tiempo de cada dato que se lee
asjgrupo4 3:53709a42c328 27 int binar1[32];
asjgrupo4 3:53709a42c328 28 int flag1=0,flag2=0;
asjgrupo4 3:53709a42c328 29
asjgrupo4 3:53709a42c328 30
tony63 0:74d57f8ae247 31
tony63 0:74d57f8ae247 32 int main(){
tony63 0:74d57f8ae247 33 while(1){
asjgrupo4 3:53709a42c328 34 ini1: header=13560;
tony63 2:6a15ab0305c8 35 led2=1;
tony63 0:74d57f8ae247 36 led=1;
tony63 2:6a15ab0305c8 37 header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo
tony63 2:6a15ab0305c8 38 if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20%
tony63 2:6a15ab0305c8 39 else goto ini1;
tony63 0:74d57f8ae247 40
tony63 2:6a15ab0305c8 41 seguir:
asjgrupo4 3:53709a42c328 42
tony63 2:6a15ab0305c8 43 //leo los datos de la trama y se meten a un arreglo
tony63 2:6a15ab0305c8 44 wait_us(5000);
tony63 2:6a15ab0305c8 45 led2=0;
tony63 2:6a15ab0305c8 46 for(i=0;i<(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
tony63 2:6a15ab0305c8 47 dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control
tony63 2:6a15ab0305c8 48 num[i]=dato;
tony63 2:6a15ab0305c8 49 wait_us(300);
tony63 2:6a15ab0305c8 50 }
tony63 2:6a15ab0305c8 51 wait(0.5); //espero un poquito antes de leer todo el arreglo y ponerlo en pantalla
tony63 2:6a15ab0305c8 52 pc.printf(",%d",header);
tony63 2:6a15ab0305c8 53 for(i=0;i<(num_bits-1);++i){
tony63 2:6a15ab0305c8 54 pc.printf(",%d",num[i]);
tony63 2:6a15ab0305c8 55 }
tony63 2:6a15ab0305c8 56 wait(0.1); //espero e imprimo en binario
tony63 2:6a15ab0305c8 57 pc.printf("\n\n");
tony63 2:6a15ab0305c8 58 for(i=0;i<(num_bits-1);++i){
asjgrupo4 3:53709a42c328 59 if(num[i] > ((T_alto+T_bajo)/2))
asjgrupo4 3:53709a42c328 60 {
asjgrupo4 3:53709a42c328 61 pc.printf("1");
asjgrupo4 3:53709a42c328 62 binar1[i]=1;
asjgrupo4 3:53709a42c328 63 } //guardo la cadena en binario
asjgrupo4 3:53709a42c328 64 else {
asjgrupo4 3:53709a42c328 65 pc.printf("0");
asjgrupo4 3:53709a42c328 66 binar1[i]=0;
tony63 2:6a15ab0305c8 67 }
tony63 2:6a15ab0305c8 68 }
asjgrupo4 3:53709a42c328 69
asjgrupo4 3:53709a42c328 70 cont=0;
asjgrupo4 3:53709a42c328 71
asjgrupo4 3:53709a42c328 72 for(k=0;k<=28;k=k+4)//recorre cada byte y entra al for que recorre los bits de cada byte
asjgrupo4 3:53709a42c328 73 {
asjgrupo4 3:53709a42c328 74 pot=3;
asjgrupo4 3:53709a42c328 75 for(c=0;c<4;++c)
asjgrupo4 3:53709a42c328 76 {
asjgrupo4 3:53709a42c328 77 //otra=pow(2.0,pot); ////conversion de binario a hexadecimal recorre de a cada bit hasta tener un byte y lo convierte en hexadecimal
asjgrupo4 3:53709a42c328 78 hexa=hexa+binar1[(c+k)]*pow(2.0,pot); //Binar1 *2^pot calcula el peso del bit actual Y lo va acumulando en hexa Al final hexa, tiene la suma de los pesos de los bit y eso da el valor hexadecimal
asjgrupo4 3:53709a42c328 79 --pot;// decrementa pot(2^3,2^2,2^1,2^0)
asjgrupo4 3:53709a42c328 80 }
asjgrupo4 3:53709a42c328 81
asjgrupo4 3:53709a42c328 82
asjgrupo4 3:53709a42c328 83 hexadeci[cont]=hexa;// guarda los 8 bytes
asjgrupo4 3:53709a42c328 84 hexa=0;// vuelve a poner hexa en 0 para mirar el otro byte siguiente
asjgrupo4 3:53709a42c328 85 ++cont;// aumento el contador
asjgrupo4 3:53709a42c328 86 }
asjgrupo4 3:53709a42c328 87
asjgrupo4 3:53709a42c328 88
asjgrupo4 3:53709a42c328 89 j=0; //banderas
asjgrupo4 3:53709a42c328 90 flag1=0;
asjgrupo4 3:53709a42c328 91 while(flag1==0)
asjgrupo4 3:53709a42c328 92 {
asjgrupo4 3:53709a42c328 93 flag2=j;//se utiliza para dejar de ver datos y volver a hundir un boton del control para ver otros datos
asjgrupo4 3:53709a42c328 94 if(button3.falling())
asjgrupo4 3:53709a42c328 95 {
asjgrupo4 3:53709a42c328 96 flag1=1; //se sale del while y hay que volver a hundir un boton en el control para iniciar
asjgrupo4 3:53709a42c328 97 }
asjgrupo4 3:53709a42c328 98 if(button1.falling()) //bajar
asjgrupo4 3:53709a42c328 99 {
asjgrupo4 3:53709a42c328 100 j++;
asjgrupo4 3:53709a42c328 101 if(j>34){j=34;} //limite inferior. llega hasta 31 contando el hexadecimal,distancia entre bits,t.bits y un espacio es hasta 34
asjgrupo4 3:53709a42c328 102 }
asjgrupo4 3:53709a42c328 103 if(button2.falling()) //subir
asjgrupo4 3:53709a42c328 104 {
asjgrupo4 3:53709a42c328 105 j--;
asjgrupo4 3:53709a42c328 106 if(j<0){j=0;}//limite superior
asjgrupo4 3:53709a42c328 107 }
asjgrupo4 3:53709a42c328 108 if(flag2!=j){lcd.cls();}//limpio para hacer el scroll
asjgrupo4 3:53709a42c328 109
asjgrupo4 3:53709a42c328 110 switch(j)// el scrol se hizo mediante varios casos para esto se utiliza un switch
asjgrupo4 3:53709a42c328 111 {
asjgrupo4 3:53709a42c328 112 case 0://en el caso 0 se muestra el hexadecimal guardado en la cadena hexadeci
asjgrupo4 3:53709a42c328 113 for(i=0;i<8;++i)// me muestra el valor de cada byte en hexadecimal moviendo hacia la derecha en el LCD
asjgrupo4 3:53709a42c328 114 {
asjgrupo4 3:53709a42c328 115 lcd.locate(i,0);
asjgrupo4 3:53709a42c328 116 lcd.printf("%X",hexadeci[i]);
asjgrupo4 3:53709a42c328 117 }
asjgrupo4 3:53709a42c328 118 lcd.locate(0,1);
asjgrupo4 3:53709a42c328 119 lcd.printf("Header = %d us", header);//imprimo header
asjgrupo4 3:53709a42c328 120
asjgrupo4 3:53709a42c328 121 break;
asjgrupo4 3:53709a42c328 122
asjgrupo4 3:53709a42c328 123 case 1:
asjgrupo4 3:53709a42c328 124 lcd.locate(0,0);
asjgrupo4 3:53709a42c328 125 lcd.printf("Header = %d us", header);
asjgrupo4 3:53709a42c328 126 lcd.locate(0,1);
asjgrupo4 3:53709a42c328 127 lcd.printf("d.bits = 567 us");
asjgrupo4 3:53709a42c328 128 break;
asjgrupo4 3:53709a42c328 129
asjgrupo4 3:53709a42c328 130 case 2:
asjgrupo4 3:53709a42c328 131 lcd.locate(0,0);
asjgrupo4 3:53709a42c328 132 lcd.printf("d.bits = 567 us");
asjgrupo4 3:53709a42c328 133 lcd.locate(0,1);
asjgrupo4 3:53709a42c328 134 lcd.printf("t.bits");
asjgrupo4 3:53709a42c328 135 break;
asjgrupo4 3:53709a42c328 136
asjgrupo4 3:53709a42c328 137
asjgrupo4 3:53709a42c328 138 case 3:
asjgrupo4 3:53709a42c328 139 lcd.locate(0,0);
asjgrupo4 3:53709a42c328 140 lcd.printf("t.bits");
asjgrupo4 3:53709a42c328 141 break;
asjgrupo4 3:53709a42c328 142
asjgrupo4 3:53709a42c328 143 case 4:
asjgrupo4 3:53709a42c328 144 lcd.locate(0,1);
asjgrupo4 3:53709a42c328 145 lcd.printf("%d uS",num[0]);
asjgrupo4 3:53709a42c328 146 break;
asjgrupo4 3:53709a42c328 147
asjgrupo4 3:53709a42c328 148 default:// resto de casos
asjgrupo4 3:53709a42c328 149 cont=j-5;// cont esta en 5 entonces cont=0 me muestra el primer numero de la cadena num que seria num[0] y
asjgrupo4 3:53709a42c328 150 lcd.locate(0,0);
asjgrupo4 3:53709a42c328 151 lcd.printf("%d uS",num[cont])
asjgrupo4 3:53709a42c328 152 lcd.locate(0,1);
asjgrupo4 3:53709a42c328 153 lcd.printf("%d uS",num[cont+1]);// abajo me muestra el siguiente, ya si sigue con los otros caso hasta j=34
asjgrupo4 3:53709a42c328 154 break;
asjgrupo4 3:53709a42c328 155
asjgrupo4 3:53709a42c328 156 }
asjgrupo4 3:53709a42c328 157
asjgrupo4 3:53709a42c328 158 }
asjgrupo4 3:53709a42c328 159 }
asjgrupo4 3:53709a42c328 160 }