Tarea 6 Procesadores_Infrarojo Ernesto Jose Guevara Sequeda Juan Salvador Payares Iriarte
Dependencies: DebouncedIn Pulse1 TextLCD mbed
Fork of irda_V_aula by
main.cpp@4:8c523cea7a26, 2014-05-16 (annotated)
- Committer:
- payarito32
- Date:
- Fri May 16 16:24:02 2014 +0000
- Revision:
- 4:8c523cea7a26
- Parent:
- 3:82bebaf2a06a
Tarea 6 Procesadores_Infrarojo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tony63 | 0:74d57f8ae247 | 1 | #include "mbed.h" |
tony63 | 0:74d57f8ae247 | 2 | #include <Pulse1.h> |
payarito32 | 4:8c523cea7a26 | 3 | #include "TextLCD.h" |
payarito32 | 4:8c523cea7a26 | 4 | #include "math.h" |
payarito32 | 4:8c523cea7a26 | 5 | #include "stdio.h" |
payarito32 | 4:8c523cea7a26 | 6 | #include "DebouncedIn.h" |
payarito32 | 4:8c523cea7a26 | 7 | |
tony63 | 3:82bebaf2a06a | 8 | //control remoto videobeam aula |
tony63 | 2:6a15ab0305c8 | 9 | PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo |
tony63 | 0:74d57f8ae247 | 10 | Serial pc(USBTX, USBRX); |
payarito32 | 4:8c523cea7a26 | 11 | //DigitalOut led(LED1); |
payarito32 | 4:8c523cea7a26 | 12 | //DigitalOut led2(LED2); |
payarito32 | 4:8c523cea7a26 | 13 | DigitalOut led3(LED3); |
payarito32 | 4:8c523cea7a26 | 14 | DigitalOut led4(LED4); |
payarito32 | 4:8c523cea7a26 | 15 | DigitalOut led5(LED1); |
payarito32 | 4:8c523cea7a26 | 16 | bool encendido1; //Banderas de indicacin led encendido |
payarito32 | 4:8c523cea7a26 | 17 | bool encendido2; |
payarito32 | 4:8c523cea7a26 | 18 | bool encendido3; |
payarito32 | 4:8c523cea7a26 | 19 | int decimal; |
payarito32 | 4:8c523cea7a26 | 20 | int i; |
payarito32 | 4:8c523cea7a26 | 21 | int c2=3; |
payarito32 | 4:8c523cea7a26 | 22 | float p; |
payarito32 | 4:8c523cea7a26 | 23 | float c; |
payarito32 | 4:8c523cea7a26 | 24 | int potencia=1; |
tony63 | 2:6a15ab0305c8 | 25 | int header =0; //tiempo de cabecera pulso abajo |
payarito32 | 4:8c523cea7a26 | 26 | const int head_H = 4500+450; //+10% medida con osciloscopio en microsegundos |
payarito32 | 4:8c523cea7a26 | 27 | const int head_L = 4500-450;//-10% medida con osciloscopio |
payarito32 | 4:8c523cea7a26 | 28 | |
payarito32 | 4:8c523cea7a26 | 29 | const int T_alto=1600;//ponga su tiempo de la prueba |
payarito32 | 4:8c523cea7a26 | 30 | const int T_bajo=560;//ponga su tiempo de la prueba |
tony63 | 3:82bebaf2a06a | 31 | const int num_bits = 64;//ponga su numero de bits |
tony63 | 2:6a15ab0305c8 | 32 | int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos |
tony63 | 2:6a15ab0305c8 | 33 | int dato; // tiempo de cada dato que se lee |
payarito32 | 4:8c523cea7a26 | 34 | TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); |
payarito32 | 4:8c523cea7a26 | 35 | int dec[64]; |
payarito32 | 4:8c523cea7a26 | 36 | int j; |
payarito32 | 4:8c523cea7a26 | 37 | int bit1; |
payarito32 | 4:8c523cea7a26 | 38 | int bit0; |
payarito32 | 4:8c523cea7a26 | 39 | //entradas |
payarito32 | 4:8c523cea7a26 | 40 | int t=0; |
payarito32 | 4:8c523cea7a26 | 41 | |
payarito32 | 4:8c523cea7a26 | 42 | DebouncedIn p1(PTC3); |
payarito32 | 4:8c523cea7a26 | 43 | DebouncedIn p2(PTC4); |
payarito32 | 4:8c523cea7a26 | 44 | DebouncedIn p3(PTC5); |
payarito32 | 4:8c523cea7a26 | 45 | |
tony63 | 0:74d57f8ae247 | 46 | int main(){ |
payarito32 | 4:8c523cea7a26 | 47 | |
payarito32 | 4:8c523cea7a26 | 48 | lcd.printf("COMENZAR"); |
payarito32 | 4:8c523cea7a26 | 49 | lcd.locate(0,0); |
payarito32 | 4:8c523cea7a26 | 50 | while(1){ |
payarito32 | 4:8c523cea7a26 | 51 | |
payarito32 | 4:8c523cea7a26 | 52 | ini1: fflush( stdin ); |
payarito32 | 4:8c523cea7a26 | 53 | header=0; |
payarito32 | 4:8c523cea7a26 | 54 | |
payarito32 | 4:8c523cea7a26 | 55 | // led=1; |
payarito32 | 4:8c523cea7a26 | 56 | header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo en header |
payarito32 | 4:8c523cea7a26 | 57 | if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20% |
payarito32 | 4:8c523cea7a26 | 58 | else goto ini1; |
payarito32 | 4:8c523cea7a26 | 59 | |
payarito32 | 4:8c523cea7a26 | 60 | seguir: |
payarito32 | 4:8c523cea7a26 | 61 | lcd.cls(); |
payarito32 | 4:8c523cea7a26 | 62 | decimal = 0; |
payarito32 | 4:8c523cea7a26 | 63 | |
payarito32 | 4:8c523cea7a26 | 64 | //leo los datos de la trama y se meten a un arreglo |
payarito32 | 4:8c523cea7a26 | 65 | wait_us(4500);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO |
payarito32 | 4:8c523cea7a26 | 66 | // led2=0; |
payarito32 | 4:8c523cea7a26 | 67 | |
payarito32 | 4:8c523cea7a26 | 68 | |
payarito32 | 4:8c523cea7a26 | 69 | for(i=0;i<(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos |
payarito32 | 4:8c523cea7a26 | 70 | dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control |
payarito32 | 4:8c523cea7a26 | 71 | num[i]=dato; |
payarito32 | 4:8c523cea7a26 | 72 | wait_us(300); |
payarito32 | 4:8c523cea7a26 | 73 | } |
payarito32 | 4:8c523cea7a26 | 74 | |
payarito32 | 4:8c523cea7a26 | 75 | |
payarito32 | 4:8c523cea7a26 | 76 | wait(0.5); //espero un poquito luego de leer todo el areglo y ponerlo en pantalla |
payarito32 | 4:8c523cea7a26 | 77 | pc.printf(",%d",header); |
payarito32 | 4:8c523cea7a26 | 78 | |
payarito32 | 4:8c523cea7a26 | 79 | for(i=0;i<(num_bits-1);++i){ |
payarito32 | 4:8c523cea7a26 | 80 | pc.printf(",%d",num[i]); |
payarito32 | 4:8c523cea7a26 | 81 | } |
payarito32 | 4:8c523cea7a26 | 82 | wait(0.1); //espero e imprimo en binario |
payarito32 | 4:8c523cea7a26 | 83 | pc.printf("\n\n"); |
payarito32 | 4:8c523cea7a26 | 84 | |
payarito32 | 4:8c523cea7a26 | 85 | lcd.locate(0,0); |
payarito32 | 4:8c523cea7a26 | 86 | for(i=42;i<(num_bits-1);++i){ |
payarito32 | 4:8c523cea7a26 | 87 | |
payarito32 | 4:8c523cea7a26 | 88 | if(num[i] > ((T_alto+T_bajo)/2)){ |
payarito32 | 4:8c523cea7a26 | 89 | //lcd.printf("%d", 1); |
payarito32 | 4:8c523cea7a26 | 90 | dec[i]=1; |
payarito32 | 4:8c523cea7a26 | 91 | bit1 = num[i]; |
payarito32 | 4:8c523cea7a26 | 92 | //potencia de 2 |
payarito32 | 4:8c523cea7a26 | 93 | |
payarito32 | 4:8c523cea7a26 | 94 | |
payarito32 | 4:8c523cea7a26 | 95 | }else{ |
payarito32 | 4:8c523cea7a26 | 96 | // lcd.printf("%d", 0); |
payarito32 | 4:8c523cea7a26 | 97 | dec[i] = 0; |
payarito32 | 4:8c523cea7a26 | 98 | bit0 = num[i]; |
payarito32 | 4:8c523cea7a26 | 99 | } |
payarito32 | 4:8c523cea7a26 | 100 | |
payarito32 | 4:8c523cea7a26 | 101 | |
payarito32 | 4:8c523cea7a26 | 102 | // lcd.printf("Bits Fin: %d %d",dec[i-1],dec[i-2]); |
payarito32 | 4:8c523cea7a26 | 103 | |
payarito32 | 4:8c523cea7a26 | 104 | }//cierro for |
payarito32 | 4:8c523cea7a26 | 105 | |
payarito32 | 4:8c523cea7a26 | 106 | //Utilizo |
payarito32 | 4:8c523cea7a26 | 107 | c=0; |
payarito32 | 4:8c523cea7a26 | 108 | for(i=42; i<=63;++i){ |
payarito32 | 4:8c523cea7a26 | 109 | if(dec[i] == 1){ |
payarito32 | 4:8c523cea7a26 | 110 | p = c; |
payarito32 | 4:8c523cea7a26 | 111 | float potencia = 1; |
payarito32 | 4:8c523cea7a26 | 112 | |
payarito32 | 4:8c523cea7a26 | 113 | for(j = 1; j <= p; ++j){ |
payarito32 | 4:8c523cea7a26 | 114 | potencia = potencia*2; |
payarito32 | 4:8c523cea7a26 | 115 | } |
payarito32 | 4:8c523cea7a26 | 116 | if(p ==0){ |
payarito32 | 4:8c523cea7a26 | 117 | potencia=1; |
payarito32 | 4:8c523cea7a26 | 118 | } |
payarito32 | 4:8c523cea7a26 | 119 | decimal = decimal + potencia; |
payarito32 | 4:8c523cea7a26 | 120 | }//fin if |
payarito32 | 4:8c523cea7a26 | 121 | c++; |
payarito32 | 4:8c523cea7a26 | 122 | }//Fin for |
payarito32 | 4:8c523cea7a26 | 123 | |
payarito32 | 4:8c523cea7a26 | 124 | //lcd.printf("%10d", decimal); |
payarito32 | 4:8c523cea7a26 | 125 | |
payarito32 | 4:8c523cea7a26 | 126 | if(decimal == 1933827){ |
payarito32 | 4:8c523cea7a26 | 127 | if(encendido2 == false && encendido3 == false){ |
payarito32 | 4:8c523cea7a26 | 128 | |
payarito32 | 4:8c523cea7a26 | 129 | |
payarito32 | 4:8c523cea7a26 | 130 | c2= c2+1; |
payarito32 | 4:8c523cea7a26 | 131 | |
payarito32 | 4:8c523cea7a26 | 132 | if(c2 % 2 != 0){ |
payarito32 | 4:8c523cea7a26 | 133 | led3=0; |
payarito32 | 4:8c523cea7a26 | 134 | lcd.printf("Tecla 1 ON"); |
payarito32 | 4:8c523cea7a26 | 135 | encendido1 = true; |
payarito32 | 4:8c523cea7a26 | 136 | }else{ |
payarito32 | 4:8c523cea7a26 | 137 | led3=1; |
payarito32 | 4:8c523cea7a26 | 138 | encendido1 = false; |
payarito32 | 4:8c523cea7a26 | 139 | lcd.printf("Tecla 1 OFF"); |
payarito32 | 4:8c523cea7a26 | 140 | }//Fin else C2 %2 =0 |
payarito32 | 4:8c523cea7a26 | 141 | |
payarito32 | 4:8c523cea7a26 | 142 | }else{ |
payarito32 | 4:8c523cea7a26 | 143 | lcd.cls(); |
payarito32 | 4:8c523cea7a26 | 144 | lcd.printf("Boton Incorrecto!"); |
payarito32 | 4:8c523cea7a26 | 145 | }//cierro else |
payarito32 | 4:8c523cea7a26 | 146 | |
payarito32 | 4:8c523cea7a26 | 147 | ++t; |
payarito32 | 4:8c523cea7a26 | 148 | if(t==1){ |
payarito32 | 4:8c523cea7a26 | 149 | lcd.locate(0,1); |
payarito32 | 4:8c523cea7a26 | 150 | lcd.printf("Cabecera H: %d ", header); |
payarito32 | 4:8c523cea7a26 | 151 | } |
payarito32 | 4:8c523cea7a26 | 152 | |
payarito32 | 4:8c523cea7a26 | 153 | if(t==2){ |
payarito32 | 4:8c523cea7a26 | 154 | lcd.locate(0,1); |
payarito32 | 4:8c523cea7a26 | 155 | lcd.printf("T Alto: %d ", bit1); |
payarito32 | 4:8c523cea7a26 | 156 | |
payarito32 | 4:8c523cea7a26 | 157 | } |
payarito32 | 4:8c523cea7a26 | 158 | if(t==3){ |
payarito32 | 4:8c523cea7a26 | 159 | lcd.locate(0,1); |
payarito32 | 4:8c523cea7a26 | 160 | lcd.printf("T Bajo: %d ", bit0); |
payarito32 | 4:8c523cea7a26 | 161 | t=0; |
payarito32 | 4:8c523cea7a26 | 162 | } |
payarito32 | 4:8c523cea7a26 | 163 | }//cierro if decimal 1 |
payarito32 | 4:8c523cea7a26 | 164 | |
payarito32 | 4:8c523cea7a26 | 165 | if(decimal == 1607427){ |
payarito32 | 4:8c523cea7a26 | 166 | if(encendido1 == false && encendido3 == false){ |
payarito32 | 4:8c523cea7a26 | 167 | |
payarito32 | 4:8c523cea7a26 | 168 | c2= c2+1; |
payarito32 | 4:8c523cea7a26 | 169 | encendido2= true; |
payarito32 | 4:8c523cea7a26 | 170 | if(c2 % 2 != 0){ |
payarito32 | 4:8c523cea7a26 | 171 | lcd.printf("Tecla 9 ON"); |
payarito32 | 4:8c523cea7a26 | 172 | led4=0; |
payarito32 | 4:8c523cea7a26 | 173 | }else{ |
payarito32 | 4:8c523cea7a26 | 174 | led4=1; |
payarito32 | 4:8c523cea7a26 | 175 | encendido2 = false; |
payarito32 | 4:8c523cea7a26 | 176 | lcd.printf("Tecla 9 OFF"); |
payarito32 | 4:8c523cea7a26 | 177 | } |
payarito32 | 4:8c523cea7a26 | 178 | }else{ |
payarito32 | 4:8c523cea7a26 | 179 | lcd.cls(); |
payarito32 | 4:8c523cea7a26 | 180 | lcd.printf("Boton Incorrecto!"); |
payarito32 | 4:8c523cea7a26 | 181 | } |
payarito32 | 4:8c523cea7a26 | 182 | |
payarito32 | 4:8c523cea7a26 | 183 | |
payarito32 | 4:8c523cea7a26 | 184 | |
payarito32 | 4:8c523cea7a26 | 185 | ++t; |
payarito32 | 4:8c523cea7a26 | 186 | if(t==1){ |
payarito32 | 4:8c523cea7a26 | 187 | lcd.locate(0,1); |
payarito32 | 4:8c523cea7a26 | 188 | lcd.printf("Cabecera H: %d ", header); |
payarito32 | 4:8c523cea7a26 | 189 | } |
payarito32 | 4:8c523cea7a26 | 190 | |
payarito32 | 4:8c523cea7a26 | 191 | if(t==2){ |
payarito32 | 4:8c523cea7a26 | 192 | lcd.locate(0,1); |
payarito32 | 4:8c523cea7a26 | 193 | lcd.printf("T Alto: %d ", bit1); |
payarito32 | 4:8c523cea7a26 | 194 | |
payarito32 | 4:8c523cea7a26 | 195 | } |
payarito32 | 4:8c523cea7a26 | 196 | if(t==3){ |
payarito32 | 4:8c523cea7a26 | 197 | lcd.locate(0,1); |
payarito32 | 4:8c523cea7a26 | 198 | lcd.printf("T Bajo: %d ", bit0); |
payarito32 | 4:8c523cea7a26 | 199 | t=0; |
payarito32 | 4:8c523cea7a26 | 200 | } |
payarito32 | 4:8c523cea7a26 | 201 | }// fin decimal 9 |
payarito32 | 4:8c523cea7a26 | 202 | |
payarito32 | 4:8c523cea7a26 | 203 | |
payarito32 | 4:8c523cea7a26 | 204 | if(decimal == 1640067){ |
payarito32 | 4:8c523cea7a26 | 205 | if(encendido1 == false && encendido2 == false){ |
payarito32 | 4:8c523cea7a26 | 206 | |
payarito32 | 4:8c523cea7a26 | 207 | c2= c2+1; |
payarito32 | 4:8c523cea7a26 | 208 | encendido3 = true; |
payarito32 | 4:8c523cea7a26 | 209 | if(c2 % 2 != 0){ |
payarito32 | 4:8c523cea7a26 | 210 | led5=0; |
payarito32 | 4:8c523cea7a26 | 211 | lcd.printf("Tecla 8 ON"); |
payarito32 | 4:8c523cea7a26 | 212 | }else{ |
payarito32 | 4:8c523cea7a26 | 213 | led5=1; |
payarito32 | 4:8c523cea7a26 | 214 | encendido3 = false; |
payarito32 | 4:8c523cea7a26 | 215 | lcd.printf("Tecla 8 OFF"); |
payarito32 | 4:8c523cea7a26 | 216 | } |
payarito32 | 4:8c523cea7a26 | 217 | |
payarito32 | 4:8c523cea7a26 | 218 | }else{ |
payarito32 | 4:8c523cea7a26 | 219 | lcd.cls(); |
payarito32 | 4:8c523cea7a26 | 220 | lcd.printf("Boton Incorrecto!"); |
payarito32 | 4:8c523cea7a26 | 221 | |
payarito32 | 4:8c523cea7a26 | 222 | } |
payarito32 | 4:8c523cea7a26 | 223 | |
payarito32 | 4:8c523cea7a26 | 224 | |
payarito32 | 4:8c523cea7a26 | 225 | ++t; |
payarito32 | 4:8c523cea7a26 | 226 | if(t==1){ |
payarito32 | 4:8c523cea7a26 | 227 | lcd.locate(0,1); |
payarito32 | 4:8c523cea7a26 | 228 | lcd.printf("Cabecera H: %d ", header); |
payarito32 | 4:8c523cea7a26 | 229 | } |
payarito32 | 4:8c523cea7a26 | 230 | |
payarito32 | 4:8c523cea7a26 | 231 | if(t==2){ |
payarito32 | 4:8c523cea7a26 | 232 | lcd.locate(0,1); |
payarito32 | 4:8c523cea7a26 | 233 | lcd.printf("T Alto: %d ", bit1); |
payarito32 | 4:8c523cea7a26 | 234 | |
payarito32 | 4:8c523cea7a26 | 235 | } |
payarito32 | 4:8c523cea7a26 | 236 | if(t==3){ |
payarito32 | 4:8c523cea7a26 | 237 | lcd.locate(0,1); |
payarito32 | 4:8c523cea7a26 | 238 | lcd.printf("T Bajo: %d ", bit0); |
payarito32 | 4:8c523cea7a26 | 239 | t=0; |
payarito32 | 4:8c523cea7a26 | 240 | } |
payarito32 | 4:8c523cea7a26 | 241 | }//cierro if decimal 8 |
payarito32 | 4:8c523cea7a26 | 242 | |
payarito32 | 4:8c523cea7a26 | 243 | |
payarito32 | 4:8c523cea7a26 | 244 | |
payarito32 | 4:8c523cea7a26 | 245 | |
payarito32 | 4:8c523cea7a26 | 246 | }//cierro while |
payarito32 | 4:8c523cea7a26 | 247 | |
payarito32 | 4:8c523cea7a26 | 248 | |
payarito32 | 4:8c523cea7a26 | 249 | if(p1.falling()){ |
payarito32 | 4:8c523cea7a26 | 250 | ++t; |
payarito32 | 4:8c523cea7a26 | 251 | if(t==1){ |
payarito32 | 4:8c523cea7a26 | 252 | lcd.cls(); |
payarito32 | 4:8c523cea7a26 | 253 | |
payarito32 | 4:8c523cea7a26 | 254 | }//T1 |
payarito32 | 4:8c523cea7a26 | 255 | |
payarito32 | 4:8c523cea7a26 | 256 | if(t==2){ |
payarito32 | 4:8c523cea7a26 | 257 | lcd.cls(); |
payarito32 | 4:8c523cea7a26 | 258 | lcd.locate(0,0); |
payarito32 | 4:8c523cea7a26 | 259 | lcd.printf("T_alto: %d ", bit1); |
payarito32 | 4:8c523cea7a26 | 260 | lcd.locate(0,1); |
payarito32 | 4:8c523cea7a26 | 261 | lcd.printf("T_bajo: %d ", bit0); |
payarito32 | 4:8c523cea7a26 | 262 | t=0; |
payarito32 | 4:8c523cea7a26 | 263 | }//T1 |
payarito32 | 4:8c523cea7a26 | 264 | |
payarito32 | 4:8c523cea7a26 | 265 | |
payarito32 | 4:8c523cea7a26 | 266 | } |
payarito32 | 4:8c523cea7a26 | 267 | |
payarito32 | 4:8c523cea7a26 | 268 | |
payarito32 | 4:8c523cea7a26 | 269 | if(p2.falling()){ |
payarito32 | 4:8c523cea7a26 | 270 | lcd.cls(); |
payarito32 | 4:8c523cea7a26 | 271 | |
payarito32 | 4:8c523cea7a26 | 272 | lcd.printf("%d %d", t, num[t]); |
payarito32 | 4:8c523cea7a26 | 273 | lcd.locate(0,1); |
payarito32 | 4:8c523cea7a26 | 274 | lcd.printf("%d %d", t+1, num[t+1]); |
payarito32 | 4:8c523cea7a26 | 275 | } |
payarito32 | 4:8c523cea7a26 | 276 | |
payarito32 | 4:8c523cea7a26 | 277 | |
payarito32 | 4:8c523cea7a26 | 278 | //Fin pulsadores |
payarito32 | 4:8c523cea7a26 | 279 | |
payarito32 | 4:8c523cea7a26 | 280 | |
tony63 | 0:74d57f8ae247 | 281 | |
payarito32 | 4:8c523cea7a26 | 282 | |
tony63 | 2:6a15ab0305c8 | 283 | } |
payarito32 | 4:8c523cea7a26 | 284 | |
payarito32 | 4:8c523cea7a26 | 285 | |
payarito32 | 4:8c523cea7a26 | 286 | |
payarito32 | 4:8c523cea7a26 | 287 |