ESTE PROGRAMA VA A CONTROLAR LAS VARIABLES DE HUMEDAD Y TEMPERATURA SET POINT POR EL USUARIO A TRAVES DE UNA INTERFAZ
Dependencies: mbed TextLCD Keypad DS1307 DHT11
main.cpp@3:65184d2ffad8, 2020-02-17 (annotated)
- Committer:
- geogarcia
- Date:
- Mon Feb 17 13:38:12 2020 +0000
- Revision:
- 3:65184d2ffad8
- Parent:
- 2:0edb81388d5f
El proyecto trata de un datalogger de humedad y temperatura con registro en tiempo real, empleando el sensor DHT11, el modulo RTC DS1307, placa STM32M4 Discovery
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
geogarcia | 3:65184d2ffad8 | 1 | ////////////////////////////////// LIBRERIAS DEL PROYECTO/////////////////////////////////////////////////////// |
geogarcia | 1:2377110920ce | 2 | #include "mbed.h"// libreria principal mbed |
geogarcia | 1:2377110920ce | 3 | #include "TextLCD.h"// libreria lcd |
geogarcia | 1:2377110920ce | 4 | #include "Keypad.h"// libreria Keypad |
geogarcia | 1:2377110920ce | 5 | #include "DHT11.h"// libreria sensor de humedad y temperatura |
geogarcia | 3:65184d2ffad8 | 6 | #include "math.h"// libreria matematicas |
geogarcia | 3:65184d2ffad8 | 7 | #include "ds1307.h"// libreria rtc ds1307 |
geogarcia | 3:65184d2ffad8 | 8 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 3:65184d2ffad8 | 9 | ///////////////////////////////// CONFIGURACION DE GPIO /////////////////////////////////////////////////////// |
geogarcia | 3:65184d2ffad8 | 10 | Serial pc(PA_2,PA_3);// configuracion de pines de Tx,Rx de comunicacion serial |
geogarcia | 1:2377110920ce | 11 | DigitalOut myled(PD_13);// configura salida digital y asigna a myled al pin d13 |
geogarcia | 1:2377110920ce | 12 | TextLCD lcd(PB_7,PB_8,PB_15,PB_14,PB_13,PB_12,TextLCD:: LCD16x2);// configuracion de conexion de lcd |
geogarcia | 3:65184d2ffad8 | 13 | Keypad teclado(PC_8,PC_11,PC_7,PC_6,PB_0,PD_6,PD_7,PB_3);//configuraciones de pines de teclado |
geogarcia | 3:65184d2ffad8 | 14 | DHT11 dato(PC_5);// configuracion de pin de data sensor |
geogarcia | 3:65184d2ffad8 | 15 | DS1307 my1307(PB_7,PB_8);// configuracion de pines de comunicacion I2C(sda,scl) |
geogarcia | 3:65184d2ffad8 | 16 | Ticker flipper1;// configuracion de funcion ticker(interrupcion) |
geogarcia | 3:65184d2ffad8 | 17 | Ticker flipper2;// configuracion de funcion ticker(interrupcion) |
geogarcia | 3:65184d2ffad8 | 18 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 3:65184d2ffad8 | 19 | ////////////////////////// DECLARACION DE VARIABLES GLOBALES //////////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 20 | int rtc=0; |
geogarcia | 2:0edb81388d5f | 21 | int sec=0; |
geogarcia | 2:0edb81388d5f | 22 | int mins=0; |
geogarcia | 2:0edb81388d5f | 23 | int hours=0; |
geogarcia | 2:0edb81388d5f | 24 | int day=0; |
geogarcia | 2:0edb81388d5f | 25 | int date=0; |
geogarcia | 2:0edb81388d5f | 26 | int month=0; |
geogarcia | 2:0edb81388d5f | 27 | int year=0; |
geogarcia | 2:0edb81388d5f | 28 | int muestreo; |
geogarcia | 1:2377110920ce | 29 | int z; |
geogarcia | 3:65184d2ffad8 | 30 | char key;// variable usada en el teclado |
geogarcia | 3:65184d2ffad8 | 31 | int released;// variable usada en el teclado |
geogarcia | 1:2377110920ce | 32 | int s; // variable usada en rutina sensor |
geogarcia | 3:65184d2ffad8 | 33 | int temp;// |
geogarcia | 3:65184d2ffad8 | 34 | int temp1;// |
geogarcia | 3:65184d2ffad8 | 35 | int hum;// |
geogarcia | 3:65184d2ffad8 | 36 | int avrtemp;// |
geogarcia | 3:65184d2ffad8 | 37 | int avrhum;// |
geogarcia | 3:65184d2ffad8 | 38 | int conteo;// |
geogarcia | 2:0edb81388d5f | 39 | //////////////////////////////Declaracion de funciones/////////////////////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 40 | void test_rw(int test); |
geogarcia | 3:65184d2ffad8 | 41 | void lecturads1307(); |
geogarcia | 2:0edb81388d5f | 42 | |
geogarcia | 2:0edb81388d5f | 43 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 44 | ////////////////////////////////////////// SUB-RUTina lectura DS1307///////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 45 | void lecturads1307(){ |
geogarcia | 2:0edb81388d5f | 46 | my1307.gettime(&sec,&mins,&hours,&day,&date,&month,&year); |
geogarcia | 2:0edb81388d5f | 47 | pc.printf("DATE:\r"); |
geogarcia | 2:0edb81388d5f | 48 | pc.printf("%.2D",day); |
geogarcia | 2:0edb81388d5f | 49 | pc.printf(":%.2D",month); |
geogarcia | 2:0edb81388d5f | 50 | pc.printf(":%.2D\r",year); |
geogarcia | 2:0edb81388d5f | 51 | pc.printf(" %.2D",hours); |
geogarcia | 2:0edb81388d5f | 52 | pc.printf(":%.2D",mins); |
geogarcia | 2:0edb81388d5f | 53 | pc.printf(":%.2D\n\r",sec); |
geogarcia | 2:0edb81388d5f | 54 | } |
geogarcia | 3:65184d2ffad8 | 55 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 56 | ////////////////////////////////////////// SUB-RUTina INTERRUPCION2///////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 57 | void flip2(){ |
geogarcia | 2:0edb81388d5f | 58 | conteo=conteo + 1; |
geogarcia | 2:0edb81388d5f | 59 | temp1=dato.readTemperature(); |
geogarcia | 2:0edb81388d5f | 60 | muestreo=muestreo+temp1; |
geogarcia | 2:0edb81388d5f | 61 | if (conteo==1000){ |
geogarcia | 2:0edb81388d5f | 62 | avrtemp=(muestreo/conteo) ; |
geogarcia | 2:0edb81388d5f | 63 | pc.printf("*PROMEDIO DE TEMPERATURA: \r"); |
geogarcia | 2:0edb81388d5f | 64 | pc.printf("%2d C \r ",avrtemp); |
geogarcia | 2:0edb81388d5f | 65 | conteo=0; |
geogarcia | 2:0edb81388d5f | 66 | } |
geogarcia | 2:0edb81388d5f | 67 | } |
geogarcia | 2:0edb81388d5f | 68 | |
geogarcia | 3:65184d2ffad8 | 69 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 70 | ////////////////////////////////////////// SUB-RUTina INTERRUPCION1///////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 71 | void flip1(){ |
geogarcia | 2:0edb81388d5f | 72 | |
geogarcia | 2:0edb81388d5f | 73 | pc.printf("**********SE REALIZO REGISTRO DE DATOS********** \n\r"); |
geogarcia | 2:0edb81388d5f | 74 | pc.printf("Temperatura:%d C \r ",dato.readTemperature()); |
geogarcia | 2:0edb81388d5f | 75 | pc.printf("Humedad:%d Hr \r ",dato.readHumidity()); |
geogarcia | 2:0edb81388d5f | 76 | pc.printf("DATE:\r"); |
geogarcia | 2:0edb81388d5f | 77 | pc.printf("%.2D",day); |
geogarcia | 2:0edb81388d5f | 78 | pc.printf(":%.2D",month); |
geogarcia | 2:0edb81388d5f | 79 | pc.printf(":%.2D\r",year); |
geogarcia | 2:0edb81388d5f | 80 | pc.printf(" %.2D",hours); |
geogarcia | 2:0edb81388d5f | 81 | pc.printf(":%.2D",mins); |
geogarcia | 2:0edb81388d5f | 82 | pc.printf(":%.2D\n\r",sec); |
geogarcia | 2:0edb81388d5f | 83 | pc.printf("**********FIN DE REGISTRO DE DATOS**********\n\r"); |
geogarcia | 3:65184d2ffad8 | 84 | |
geogarcia | 2:0edb81388d5f | 85 | } |
geogarcia | 3:65184d2ffad8 | 86 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 87 | ////////////////////////////////////////// SUB-RUTina test DS1307///////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 88 | void test_rw(int test){ |
geogarcia | 2:0edb81388d5f | 89 | if(test==0) pc.printf("Last R/W operation passed\n\r"); |
geogarcia | 2:0edb81388d5f | 90 | else pc.printf("Last R/W operation failed\n\r"); |
geogarcia | 2:0edb81388d5f | 91 | } |
geogarcia | 3:65184d2ffad8 | 92 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 93 | ///////////////////////// SUB-RUTina DS1307 calibracion de tiempo///////////////////////////////////////////// |
geogarcia | 2:0edb81388d5f | 94 | void DS1307RTC(){ |
geogarcia | 2:0edb81388d5f | 95 | int junk=0; |
geogarcia | 2:0edb81388d5f | 96 | sec= 40; |
geogarcia | 2:0edb81388d5f | 97 | mins= 40; |
geogarcia | 2:0edb81388d5f | 98 | hours=10; |
geogarcia | 2:0edb81388d5f | 99 | day=6; |
geogarcia | 2:0edb81388d5f | 100 | date=15; |
geogarcia | 2:0edb81388d5f | 101 | month=2; |
geogarcia | 2:0edb81388d5f | 102 | year=20; |
geogarcia | 2:0edb81388d5f | 103 | test_rw(my1307.settime(sec,mins,hours,day,date,month,year)); |
geogarcia | 2:0edb81388d5f | 104 | pc.printf("seconds set are %.2D\n\r",sec); |
geogarcia | 2:0edb81388d5f | 105 | pc.printf("minutes set are %.2D\n\r",mins); |
geogarcia | 2:0edb81388d5f | 106 | pc.printf("hours set are %.2D\n\r",hours); |
geogarcia | 2:0edb81388d5f | 107 | pc.printf("day set are %.2D\n\r",day); |
geogarcia | 2:0edb81388d5f | 108 | pc.printf("date set are %.2D\n\r",date); |
geogarcia | 2:0edb81388d5f | 109 | pc.printf("month set are %.2D\n\r",month); |
geogarcia | 2:0edb81388d5f | 110 | pc.printf("year set are %.2D\n\r",year); |
geogarcia | 2:0edb81388d5f | 111 | wait(3); |
geogarcia | 2:0edb81388d5f | 112 | |
geogarcia | 2:0edb81388d5f | 113 | //while(1){ |
geogarcia | 2:0edb81388d5f | 114 | test_rw(my1307.gettime(&sec,&mins,&hours,&day,&date,&month,&year)); |
geogarcia | 2:0edb81388d5f | 115 | pc.printf("seconds set are %.2D \n\r",sec); |
geogarcia | 2:0edb81388d5f | 116 | pc.printf("minutes set are %.2D\n\r",mins); |
geogarcia | 2:0edb81388d5f | 117 | pc.printf("hours set are %.2D\n\r",hours); |
geogarcia | 2:0edb81388d5f | 118 | pc.printf("day set are %.2D\n\r",day); |
geogarcia | 2:0edb81388d5f | 119 | pc.printf("date set are %.2D\n\r",date); |
geogarcia | 2:0edb81388d5f | 120 | pc.printf("month set are %.2D\n\r",month); |
geogarcia | 2:0edb81388d5f | 121 | pc.printf("year set are %.2D\n\r",year); |
geogarcia | 2:0edb81388d5f | 122 | |
geogarcia | 2:0edb81388d5f | 123 | junk= 0x39; |
geogarcia | 2:0edb81388d5f | 124 | test_rw(my1307.write(0x20,junk)); |
geogarcia | 2:0edb81388d5f | 125 | pc.printf("Value written to register 0x20 %.2x \n\r",junk); |
geogarcia | 2:0edb81388d5f | 126 | junk=0; |
geogarcia | 2:0edb81388d5f | 127 | test_rw(my1307.read(0x20,&junk)); |
geogarcia | 2:0edb81388d5f | 128 | pc.printf("Value read from register 0x20 %.2x \n\r",junk); |
geogarcia | 2:0edb81388d5f | 129 | wait(1); |
geogarcia | 2:0edb81388d5f | 130 | rtc=1; |
geogarcia | 2:0edb81388d5f | 131 | //} |
geogarcia | 2:0edb81388d5f | 132 | //} |
geogarcia | 2:0edb81388d5f | 133 | } |
geogarcia | 2:0edb81388d5f | 134 | |
geogarcia | 3:65184d2ffad8 | 135 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 3:65184d2ffad8 | 136 | ////////////////////////////////////////// SUB-RUTina keypad//////////////////////////////////////////////////// |
geogarcia | 1:2377110920ce | 137 | void keypad1(){ |
geogarcia | 2:0edb81388d5f | 138 | // while(1){ |
geogarcia | 1:2377110920ce | 139 | key=teclado.ReadKey(); |
geogarcia | 1:2377110920ce | 140 | if(key== '\0') |
geogarcia | 1:2377110920ce | 141 | released=1; |
geogarcia | 1:2377110920ce | 142 | if((key!= '\0')&& (released==1)){ |
geogarcia | 2:0edb81388d5f | 143 | lcd.printf("%c\n",key); |
geogarcia | 1:2377110920ce | 144 | released=0; |
geogarcia | 2:0edb81388d5f | 145 | } |
geogarcia | 2:0edb81388d5f | 146 | //} |
geogarcia | 1:2377110920ce | 147 | } |
geogarcia | 1:2377110920ce | 148 | |
geogarcia | 3:65184d2ffad8 | 149 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 1:2377110920ce | 150 | ////////////////////////////////////////// SUB-RUTina SENSORE DHT11///////////////////////////////////////////// |
geogarcia | 1:2377110920ce | 151 | void sensor(){ |
geogarcia | 1:2377110920ce | 152 | s=dato.readData(); |
geogarcia | 1:2377110920ce | 153 | if (s != DHT11::OK){ |
geogarcia | 1:2377110920ce | 154 | lcd.printf("ERROR SENSOR\r\n"); |
geogarcia | 1:2377110920ce | 155 | } |
geogarcia | 1:2377110920ce | 156 | else{ |
geogarcia | 1:2377110920ce | 157 | lcd.cls(); |
geogarcia | 1:2377110920ce | 158 | return; |
geogarcia | 1:2377110920ce | 159 | } |
geogarcia | 2:0edb81388d5f | 160 | pc.printf("Temperatura:%d C \r ",dato.readTemperature()); |
geogarcia | 2:0edb81388d5f | 161 | //lcd.locate(0,1); |
geogarcia | 2:0edb81388d5f | 162 | //lcd.printf( "Hr:%d hr SP: 75 ",dato.readHumidity()); |
geogarcia | 2:0edb81388d5f | 163 | pc.printf("Humedad:%d Hr \r ",dato.readHumidity()); |
geogarcia | 1:2377110920ce | 164 | } |
geogarcia | 1:2377110920ce | 165 | |
geogarcia | 3:65184d2ffad8 | 166 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 3:65184d2ffad8 | 167 | ////////////////////////////////////////// SUB-RUTINA MENU/////////////////////////////////////////////////// |
geogarcia | 1:2377110920ce | 168 | void menu(){ |
geogarcia | 2:0edb81388d5f | 169 | //char tr; |
geogarcia | 1:2377110920ce | 170 | while(1){ |
geogarcia | 2:0edb81388d5f | 171 | key=teclado.ReadKey(); |
geogarcia | 1:2377110920ce | 172 | keypad1(); |
geogarcia | 1:2377110920ce | 173 | if(key=='D' ){ |
geogarcia | 1:2377110920ce | 174 | lcd.cls(); |
geogarcia | 1:2377110920ce | 175 | return; |
geogarcia | 1:2377110920ce | 176 | } |
geogarcia | 2:0edb81388d5f | 177 | //tr=key; |
geogarcia | 3:65184d2ffad8 | 178 | //void inicial(); |
geogarcia | 1:2377110920ce | 179 | lcd.locate(0,0);// LOCALIZA INICIO DE TEXTO EN COLUMNAS Y FILAS |
geogarcia | 1:2377110920ce | 180 | lcd.printf( " Menu " ); |
geogarcia | 1:2377110920ce | 181 | lcd.locate(0,1); |
geogarcia | 2:0edb81388d5f | 182 | // lcd.printf( " Configuracion " ); |
geogarcia | 2:0edb81388d5f | 183 | //lcd.printf("%c\n", tr ); |
geogarcia | 1:2377110920ce | 184 | //wait(3); |
geogarcia | 1:2377110920ce | 185 | //lcd.cls();//borra caracters |
geogarcia | 2:0edb81388d5f | 186 | if((key!= '\0')&& (released==1)){ |
geogarcia | 2:0edb81388d5f | 187 | lcd.printf("%c\n",key); |
geogarcia | 2:0edb81388d5f | 188 | released=0; |
geogarcia | 2:0edb81388d5f | 189 | } |
geogarcia | 1:2377110920ce | 190 | } |
geogarcia | 1:2377110920ce | 191 | |
geogarcia | 1:2377110920ce | 192 | } |
geogarcia | 1:2377110920ce | 193 | |
geogarcia | 1:2377110920ce | 194 | /////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 1:2377110920ce | 195 | //////////////////////////////////// SUB-RUTINA INICIAL /////////////////////////////////////////////// |
geogarcia | 1:2377110920ce | 196 | void inicial(){ |
geogarcia | 1:2377110920ce | 197 | while(1){ |
geogarcia | 1:2377110920ce | 198 | //lcd.cls(); |
geogarcia | 2:0edb81388d5f | 199 | //keypad1(); |
geogarcia | 1:2377110920ce | 200 | |
geogarcia | 2:0edb81388d5f | 201 | //if ( key=='A'){ |
geogarcia | 2:0edb81388d5f | 202 | //lcd.cls(); //borra caracters |
geogarcia | 2:0edb81388d5f | 203 | //menu(); |
geogarcia | 2:0edb81388d5f | 204 | //} |
geogarcia | 1:2377110920ce | 205 | |
geogarcia | 1:2377110920ce | 206 | sensor(); |
geogarcia | 3:65184d2ffad8 | 207 | lecturads1307(); |
geogarcia | 1:2377110920ce | 208 | //temp:dato.readTemperature(); |
geogarcia | 1:2377110920ce | 209 | //hum: dato.readHumidity(); |
geogarcia | 2:0edb81388d5f | 210 | //lcd.locate(0,0); // LOCALIZA INICIO DE TEXTO EN COLUMNAS Y FILAS |
geogarcia | 2:0edb81388d5f | 211 | //lcd.printf( "T :%d C SP: 40",dato.readTemperature()); |
geogarcia | 2:0edb81388d5f | 212 | //pc.printf("Temperatura:%d C \r ",dato.readTemperature()); |
geogarcia | 2:0edb81388d5f | 213 | //lcd.locate(0,1); |
geogarcia | 2:0edb81388d5f | 214 | //lcd.printf( "Hr:%d hr SP: 75 ",dato.readHumidity()); |
geogarcia | 2:0edb81388d5f | 215 | //pc.printf("Humedad:%d Hr \r ",dato.readHumidity()); |
geogarcia | 2:0edb81388d5f | 216 | wait(1); |
geogarcia | 1:2377110920ce | 217 | |
geogarcia | 1:2377110920ce | 218 | } // cierra while |
geogarcia | 1:2377110920ce | 219 | } // cierra rutina |
geogarcia | 0:fff27b50ca98 | 220 | |
geogarcia | 1:2377110920ce | 221 | ///////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 1:2377110920ce | 222 | //////////////////////////////////// RUTINA PRINCIPAL ////////////////////////////////////////////// |
geogarcia | 0:fff27b50ca98 | 223 | int main() { |
geogarcia | 1:2377110920ce | 224 | z=0; |
geogarcia | 2:0edb81388d5f | 225 | conteo=0; |
geogarcia | 2:0edb81388d5f | 226 | muestreo=0; |
geogarcia | 2:0edb81388d5f | 227 | avrtemp=0; |
geogarcia | 2:0edb81388d5f | 228 | avrhum=0; |
geogarcia | 1:2377110920ce | 229 | released=1; |
geogarcia | 1:2377110920ce | 230 | //lcd.printf("helllooo people");// escribe caracteres en el lcd |
geogarcia | 2:0edb81388d5f | 231 | flipper1.attach(&flip1,20.0); |
geogarcia | 2:0edb81388d5f | 232 | flipper2.attach(&flip2,0.001); |
geogarcia | 0:fff27b50ca98 | 233 | while(1) { |
geogarcia | 2:0edb81388d5f | 234 | |
geogarcia | 2:0edb81388d5f | 235 | //if (rtc==0) DS1307RTC(); |
geogarcia | 1:2377110920ce | 236 | // lcd.cls();//borra caracters |
geogarcia | 2:0edb81388d5f | 237 | //lcd.locate(0,0);// LOCALIZA INICIO DE TEXTO EN COLUMNAS Y FILAS |
geogarcia | 2:0edb81388d5f | 238 | //lcd.printf( " Proyecto " ); |
geogarcia | 2:0edb81388d5f | 239 | pc.printf("PROYECTO TUTORIA\n\r " ); |
geogarcia | 2:0edb81388d5f | 240 | //lcd.locate(0,1); |
geogarcia | 2:0edb81388d5f | 241 | //lcd.printf( " Tutoria " ); |
geogarcia | 2:0edb81388d5f | 242 | //pc.printf("Tutoria \n\r "); |
geogarcia | 1:2377110920ce | 243 | wait(3); |
geogarcia | 2:0edb81388d5f | 244 | //lcd.cls();//borra caracters |
geogarcia | 2:0edb81388d5f | 245 | //lcd.locate(0,0); |
geogarcia | 2:0edb81388d5f | 246 | //lcd.printf( " Sistemas " ); |
geogarcia | 2:0edb81388d5f | 247 | pc.printf("SISTEMAS MICROPROCESADOS \n\r "); |
geogarcia | 2:0edb81388d5f | 248 | pc.printf("GEOVANNY GARCIA \n\r "); |
geogarcia | 2:0edb81388d5f | 249 | |
geogarcia | 1:2377110920ce | 250 | lcd.locate(0,1); |
geogarcia | 1:2377110920ce | 251 | lcd.printf( "Microprocesados " ); |
geogarcia | 2:0edb81388d5f | 252 | //pc.printf("MICROPORCESADOS \n\r "); |
geogarcia | 2:0edb81388d5f | 253 | wait(2); |
geogarcia | 2:0edb81388d5f | 254 | //lcd.cls();//borra caracters |
geogarcia | 1:2377110920ce | 255 | inicial(); |
geogarcia | 1:2377110920ce | 256 | |
geogarcia | 1:2377110920ce | 257 | } |
geogarcia | 1:2377110920ce | 258 | |
geogarcia | 0:fff27b50ca98 | 259 | } |
geogarcia | 1:2377110920ce | 260 | |
geogarcia | 1:2377110920ce | 261 | /////////////////////////////////////////////////////////////////////////////////////////////////////// |
geogarcia | 1:2377110920ce | 262 | |
geogarcia | 1:2377110920ce | 263 | |
geogarcia | 1:2377110920ce | 264 |