infrarojo con control remoto muestra en LCD header, tiempo de bits, y la coversion hexadecimal
Dependencies: Debounced Pulse1 TextLCD mbed
Fork of irda1 by
main.cpp@4:e48988084c6d, 2015-04-29 (annotated)
- Committer:
- asjgrupo4
- Date:
- Wed Apr 29 11:37:40 2015 +0000
- Revision:
- 4:e48988084c6d
- Parent:
- 3:53709a42c328
- Child:
- 5:9c7390ddacde
a
Who changed what in which revision?
User | Revision | Line number | New 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 | 4:e48988084c6d | 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 | } |