Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: NAVDATA RA8875 mbed VCODATA
main.cpp@10:be7bcb936dcd, 2017-04-23 (annotated)
- Committer:
- gstedile
- Date:
- Sun Apr 23 18:27:58 2017 +0000
- Revision:
- 10:be7bcb936dcd
- Parent:
- 9:fe7de0e11862
Se agrega procesamiento a los datos. Funcion smooth que promedia n puntos del entorno de cada punto.; Se pasan los objetos por referencia en vez de por valor, por un problema, que estimamos que es de memoria.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gstedile | 0:d92271b032c7 | 1 | |
gstedile | 0:d92271b032c7 | 2 | #include "mbed.h" // v112 |
gstedile | 0:d92271b032c7 | 3 | #include "RA8875.h" // v102 |
gstedile | 0:d92271b032c7 | 4 | #include "MyFont18x32.h" |
gstedile | 0:d92271b032c7 | 5 | #include "BPG_Arial08x08.h" |
gstedile | 0:d92271b032c7 | 6 | #include "BPG_Arial10x10.h" |
gstedile | 0:d92271b032c7 | 7 | #include "BPG_Arial20x20.h" |
gstedile | 0:d92271b032c7 | 8 | #include "BPG_Arial31x32.h" |
gstedile | 0:d92271b032c7 | 9 | #include "BPG_Arial63x63.h" |
gstedile | 0:d92271b032c7 | 10 | |
gstedile | 0:d92271b032c7 | 11 | // Agrego includes para uso en la comunicacion con el gps. |
gstedile | 4:9901f6da64b7 | 12 | #include "GPS.h" |
gstedile | 4:9901f6da64b7 | 13 | // Agrego includes para la clase NAVDATA que maneja los datos de navegación del último período. |
gstedile | 4:9901f6da64b7 | 14 | #include "NAVDATA.h" |
gstedile | 4:9901f6da64b7 | 15 | // Agrego includes para la clase VCODATA que maneja los datos de navegación más recientes parametrizados por velocidad de cada período. |
gstedile | 3:0c9ee19fb976 | 16 | #include "VCODATA.h" |
gstedile | 3:0c9ee19fb976 | 17 | |
gstedile | 9:fe7de0e11862 | 18 | #include <sstream> //include this to use string streams |
gstedile | 4:9901f6da64b7 | 19 | #include <string> |
gstedile | 0:d92271b032c7 | 20 | |
gstedile | 10:be7bcb936dcd | 21 | int poll_init=0; // Testigo de inicio de recoleccion de datos. |
gstedile | 9:fe7de0e11862 | 22 | float Counter=0; //Contador de pulsos del sensor de flujo. |
gstedile | 9:fe7de0e11862 | 23 | float LCounter=0; //Consumo en litros |
gstedile | 9:fe7de0e11862 | 24 | const int V_M=100; //Velocidad Maxima |
gstedile | 3:0c9ee19fb976 | 25 | NAVDATA NAVIGATION_TABLE; //Objeto que maneja los datos de navegación del último período. $ |
gstedile | 9:fe7de0e11862 | 26 | VCODATA NAVIGATION_VMATRIX(NAVIGATION_TABLE, V_M); // Objeto que maneja la matriz de datos de navegación $ |
gstedile | 10:be7bcb936dcd | 27 | //VCODATA NAVIGATION_V_INTRP_MTRX(NAVIGATION_TABLE, V_M); // Objeto que maneja la matriz de datos de navegación interpolados $ |
gstedile | 10:be7bcb936dcd | 28 | VCODATA NAVIGATION_V_SMOOTH_MTRX(NAVIGATION_TABLE, V_M); // Objeto que maneja la matriz de datos de navegación promediados $ |
gstedile | 0:d92271b032c7 | 29 | |
gstedile | 0:d92271b032c7 | 30 | |
gstedile | 0:d92271b032c7 | 31 | |
gstedile | 4:9901f6da64b7 | 32 | LocalFileSystem local("local"); // Because I want <PrintScreen> |
gstedile | 4:9901f6da64b7 | 33 | Serial pc(USBTX, USBRX); // And a little feedback |
gstedile | 0:d92271b032c7 | 34 | |
gstedile | 4:9901f6da64b7 | 35 | RA8875 lcd(p5, p6, p7, p12, NC, "tft"); // MOSI, MISO, SCK, /ChipSelect, /reset, name |
gstedile | 0:d92271b032c7 | 36 | |
gstedile | 6:aebb3a0a040c | 37 | //>>>>>>>>>>>>>>>>>> SECCION AGREGADA PROVISORIAMENTE PARA EL TOUCH PANEL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
gstedile | 6:aebb3a0a040c | 38 | |
gstedile | 6:aebb3a0a040c | 39 | extern "C" void mbed_reset(); |
gstedile | 6:aebb3a0a040c | 40 | |
gstedile | 6:aebb3a0a040c | 41 | |
gstedile | 6:aebb3a0a040c | 42 | #define min(a,b) ((a<b)?a:b) |
gstedile | 6:aebb3a0a040c | 43 | #define max(a,b) ((a>b)?a:b) |
gstedile | 6:aebb3a0a040c | 44 | |
gstedile | 6:aebb3a0a040c | 45 | bool Intersect(rect_t rect, point_t p) |
gstedile | 6:aebb3a0a040c | 46 | { |
gstedile | 6:aebb3a0a040c | 47 | if (p.x >= min(rect.p1.x, rect.p2.x) && p.x <= max(rect.p1.x, rect.p2.x) |
gstedile | 6:aebb3a0a040c | 48 | && p.y >= min(rect.p1.y, rect.p2.y) && p.y <= max(rect.p1.y, rect.p2.y)) |
gstedile | 6:aebb3a0a040c | 49 | return true; |
gstedile | 6:aebb3a0a040c | 50 | else |
gstedile | 6:aebb3a0a040c | 51 | return false; |
gstedile | 6:aebb3a0a040c | 52 | } |
gstedile | 6:aebb3a0a040c | 53 | |
gstedile | 6:aebb3a0a040c | 54 | int GetScreenCapture(void) |
gstedile | 6:aebb3a0a040c | 55 | { |
gstedile | 6:aebb3a0a040c | 56 | char fqfn[50]; |
gstedile | 6:aebb3a0a040c | 57 | int i = 0; |
gstedile | 6:aebb3a0a040c | 58 | |
gstedile | 6:aebb3a0a040c | 59 | pc.printf("Screen Capture... "); |
gstedile | 6:aebb3a0a040c | 60 | for (i=1; i< 100; i++) { |
gstedile | 6:aebb3a0a040c | 61 | snprintf(fqfn, sizeof(fqfn), "/local/Screen%02d.bmp", i); |
gstedile | 6:aebb3a0a040c | 62 | FILE * fh = fopen(fqfn, "rb"); |
gstedile | 6:aebb3a0a040c | 63 | if (!fh) { |
gstedile | 6:aebb3a0a040c | 64 | lcd.PrintScreen(0,0,480,272,fqfn); |
gstedile | 6:aebb3a0a040c | 65 | pc.printf(" as /local/Screen%02d.bmp\r\n", i); |
gstedile | 6:aebb3a0a040c | 66 | return i; |
gstedile | 6:aebb3a0a040c | 67 | } else { |
gstedile | 6:aebb3a0a040c | 68 | fclose(fh); // close this and try the next |
gstedile | 6:aebb3a0a040c | 69 | } |
gstedile | 6:aebb3a0a040c | 70 | } |
gstedile | 6:aebb3a0a040c | 71 | return 0; |
gstedile | 6:aebb3a0a040c | 72 | } |
gstedile | 6:aebb3a0a040c | 73 | //>>>>>>>>>>>>>>>>>> FIN SECCION AGREGADA PROVISORIAMENTE PARA EL TOUCH PANEL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
gstedile | 6:aebb3a0a040c | 74 | |
gstedile | 9:fe7de0e11862 | 75 | //Función para la interrupción |
gstedile | 6:aebb3a0a040c | 76 | |
gstedile | 9:fe7de0e11862 | 77 | void trigger() { |
gstedile | 0:d92271b032c7 | 78 | Counter++; |
gstedile | 0:d92271b032c7 | 79 | LCounter=Counter/2500; |
gstedile | 0:d92271b032c7 | 80 | } |
gstedile | 9:fe7de0e11862 | 81 | |
gstedile | 9:fe7de0e11862 | 82 | |
gstedile | 10:be7bcb936dcd | 83 | /* Funcion print_VCO_curve : Imprime la curva de consumo/milla en funcion de la velocidad a partir del vector de objetos NAV_DATA de la clase VCODATA, con lineas (printline=1) o puntos (=0) |
gstedile | 10:be7bcb936dcd | 84 | Parametros: Objeto VCODATA; Interpolated: 0 -> no imprime valores interpolados o promediados; 1: interpola con puntos, 2: interpola con lineas*/ |
gstedile | 5:56d63eaa8415 | 85 | |
gstedile | 10:be7bcb936dcd | 86 | void print_VCO_curve(VCODATA &Matrix_VCO, int interpolated){ |
gstedile | 10:be7bcb936dcd | 87 | //lcd.puts("ENTRANDO a print_VCO_curve\r\n"); // DEBUG |
gstedile | 9:fe7de0e11862 | 88 | float s; // Consumo |
gstedile | 9:fe7de0e11862 | 89 | int y,x; |
gstedile | 10:be7bcb936dcd | 90 | int VCO= Matrix_VCO.get_VCO(); |
gstedile | 10:be7bcb936dcd | 91 | int y_offset=220; //Para que imprima de abajo hacia arriba. |
gstedile | 10:be7bcb936dcd | 92 | int y_text_offset=15; //Para cooregir diferencia de impresion entre caracter y linea. |
gstedile | 10:be7bcb936dcd | 93 | int x_offset=18; //Posicionamiento en x |
gstedile | 9:fe7de0e11862 | 94 | int y_i=y_offset; //Punto origen y |
gstedile | 9:fe7de0e11862 | 95 | int x_i=x_offset; //Punto origen x |
gstedile | 9:fe7de0e11862 | 96 | int x_scale=4; // Escala para graficar eje x. |
gstedile | 10:be7bcb936dcd | 97 | int y_scale=500; // Escala para graficar eje y. |
gstedile | 6:aebb3a0a040c | 98 | lcd.background(RGB(255,255,255)); |
gstedile | 6:aebb3a0a040c | 99 | lcd.foreground(Blue); |
gstedile | 10:be7bcb936dcd | 100 | lcd.SetTextCursor(0,0); // Pongo cursor en posicion |
gstedile | 6:aebb3a0a040c | 101 | lcd.cls(); |
gstedile | 6:aebb3a0a040c | 102 | lcd.puts(">>>>>>>>>>>>>< Proyecto SNOCC ><<<<<<<<<<<<<<\r\n"); |
gstedile | 10:be7bcb936dcd | 103 | lcd.roundrect( 5,25, 470,270, 10,8, RGB(255,255,0)); |
gstedile | 8:941a76c2d300 | 104 | lcd.fillroundrect(10,30, 465,264, 5,3, Green); |
gstedile | 8:941a76c2d300 | 105 | lcd.background(Green); |
gstedile | 8:941a76c2d300 | 106 | lcd.foreground(Blue); |
gstedile | 10:be7bcb936dcd | 107 | lcd.SetTextCursor(20,32); |
gstedile | 8:941a76c2d300 | 108 | lcd.puts("Consumo(l/m)\r\n"); |
gstedile | 10:be7bcb936dcd | 109 | lcd.SetTextCursor(265,240); |
gstedile | 10:be7bcb936dcd | 110 | lcd.puts("Velocidad(kn)\r\n"); |
gstedile | 10:be7bcb936dcd | 111 | lcd.line(x_i,y_i,Matrix_VCO.vel_max*x_scale,y_i); // Imprimo eje x. |
gstedile | 10:be7bcb936dcd | 112 | lcd.line(x_i,y_i,x_i,40); // Imprimo eje y. |
gstedile | 10:be7bcb936dcd | 113 | |
gstedile | 8:941a76c2d300 | 114 | lcd.foreground(RGB(255,255,0)); |
gstedile | 9:fe7de0e11862 | 115 | |
gstedile | 9:fe7de0e11862 | 116 | |
gstedile | 9:fe7de0e11862 | 117 | |
gstedile | 10:be7bcb936dcd | 118 | for (int n=0;n<Matrix_VCO.vel_max;n++){ // Recorre x de 0 a vel_max. |
gstedile | 10:be7bcb936dcd | 119 | s = Matrix_VCO.NAV_DATA[n].LAST_NAV_DATA[cons_mile_p]; // Consumo por milla del período |
gstedile | 10:be7bcb936dcd | 120 | y=int(y_offset-y_scale*s); // El consumo máximo es alrededor de 4 l/m => Multiplico por y_scale |
gstedile | 10:be7bcb936dcd | 121 | // para que ocupe mas pantalla. |
gstedile | 10:be7bcb936dcd | 122 | x=n*x_scale+x_offset; // para aumentar el span (eje x) |
gstedile | 10:be7bcb936dcd | 123 | switch (interpolated){ |
gstedile | 10:be7bcb936dcd | 124 | |
gstedile | 10:be7bcb936dcd | 125 | case 0: if (Matrix_VCO.NAV_DATA[n].LAST_NAV_DATA[cons_interpolated]==0){ //Valores sin interpolar |
gstedile | 10:be7bcb936dcd | 126 | lcd.SetTextCursor(x,y-y_text_offset); |
gstedile | 10:be7bcb936dcd | 127 | lcd.printf("."); |
gstedile | 10:be7bcb936dcd | 128 | } |
gstedile | 10:be7bcb936dcd | 129 | break; |
gstedile | 10:be7bcb936dcd | 130 | case 1: if ((Matrix_VCO.NAV_DATA[n].LAST_NAV_DATA[cons_interpolated]==1) || (Matrix_VCO.NAV_DATA[n].LAST_NAV_DATA[cons_interpolated]==2))lcd.foreground(Orange); // interpola con puntos de otro color |
gstedile | 10:be7bcb936dcd | 131 | lcd.SetTextCursor(x,y-y_text_offset); // el offset adicional es para corregir la diferencia de ubicacion linea-caracter. |
gstedile | 10:be7bcb936dcd | 132 | lcd.printf("."); |
gstedile | 10:be7bcb936dcd | 133 | lcd.foreground(RGB(255,255,0)); |
gstedile | 10:be7bcb936dcd | 134 | break; |
gstedile | 10:be7bcb936dcd | 135 | case 2: lcd.line(x_i,y_i,x,y); // Imprime linea |
gstedile | 10:be7bcb936dcd | 136 | break; |
gstedile | 10:be7bcb936dcd | 137 | default: |
gstedile | 10:be7bcb936dcd | 138 | lcd.SetTextCursor(x,y-y_text_offset); |
gstedile | 10:be7bcb936dcd | 139 | lcd.printf("."); |
gstedile | 10:be7bcb936dcd | 140 | break; |
gstedile | 10:be7bcb936dcd | 141 | } |
gstedile | 9:fe7de0e11862 | 142 | x_i=x; |
gstedile | 9:fe7de0e11862 | 143 | y_i=y; |
gstedile | 9:fe7de0e11862 | 144 | } |
gstedile | 8:941a76c2d300 | 145 | if (VCO>0){ |
gstedile | 10:be7bcb936dcd | 146 | s = Matrix_VCO.NAV_DATA[VCO].LAST_NAV_DATA[cons_mile_p];; // Valor de consumo para VCO. |
gstedile | 10:be7bcb936dcd | 147 | y=int(y_offset-y_scale*s); // el consumo máximo es alrededor de 2 l/m. Multiplico por y_scale para que ocupe mas pantalla. |
gstedile | 10:be7bcb936dcd | 148 | x=VCO*x_scale+x_offset; // para aumentar el span (eje x) |
gstedile | 10:be7bcb936dcd | 149 | if (interpolated==2){ |
gstedile | 10:be7bcb936dcd | 150 | lcd.circle(x,y,5); |
gstedile | 10:be7bcb936dcd | 151 | } |
gstedile | 10:be7bcb936dcd | 152 | else{ |
gstedile | 10:be7bcb936dcd | 153 | lcd.SetTextCursor(x,y); |
gstedile | 10:be7bcb936dcd | 154 | lcd.printf("*"); |
gstedile | 10:be7bcb936dcd | 155 | } |
gstedile | 10:be7bcb936dcd | 156 | lcd.SetTextCursor(VCO*x_scale+x_offset+10,y_offset-s*y_scale); |
gstedile | 10:be7bcb936dcd | 157 | lcd.printf("%f l/m",s); |
gstedile | 10:be7bcb936dcd | 158 | lcd.SetTextCursor(VCO*x_scale+x_offset+10,y_offset-s*y_scale+20); |
gstedile | 10:be7bcb936dcd | 159 | lcd.printf("VCO: %f kn",s); |
gstedile | 10:be7bcb936dcd | 160 | |
gstedile | 8:941a76c2d300 | 161 | } |
gstedile | 8:941a76c2d300 | 162 | else{ |
gstedile | 9:fe7de0e11862 | 163 | lcd.SetTextCursor(40,60); |
gstedile | 8:941a76c2d300 | 164 | lcd.printf("No hay datos suficientes para obtener la VCO"); |
gstedile | 10:be7bcb936dcd | 165 | lcd.printf("%d",VCO);//DEBUG |
gstedile | 8:941a76c2d300 | 166 | } |
gstedile | 6:aebb3a0a040c | 167 | lcd.foreground(RGB(255,255,0)); |
gstedile | 6:aebb3a0a040c | 168 | lcd.background(Black); |
gstedile | 10:be7bcb936dcd | 169 | |
gstedile | 5:56d63eaa8415 | 170 | } |
gstedile | 10:be7bcb936dcd | 171 | |
gstedile | 10:be7bcb936dcd | 172 | |
gstedile | 6:aebb3a0a040c | 173 | /* Funcion build_test_Mtrx: Carga los datos (consumo/milla) del vector LAST_NAV_DATA de los objetos NAVDATA de VCODATA para testing.*/ |
gstedile | 5:56d63eaa8415 | 174 | |
gstedile | 10:be7bcb936dcd | 175 | void build_test_Mtrx(VCODATA &Test_Matrix_VCO){ |
gstedile | 10:be7bcb936dcd | 176 | |
gstedile | 5:56d63eaa8415 | 177 | NAVDATA TestNDO; |
gstedile | 10:be7bcb936dcd | 178 | |
gstedile | 10:be7bcb936dcd | 179 | TestNDO.LAST_NAV_DATA[cons_interpolated]=-1; |
gstedile | 9:fe7de0e11862 | 180 | |
gstedile | 10:be7bcb936dcd | 181 | TestNDO.LAST_NAV_DATA[cons_mile_p]=0.3; |
gstedile | 9:fe7de0e11862 | 182 | TestNDO.LAST_NAV_DATA[speed_p]=15; |
gstedile | 9:fe7de0e11862 | 183 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 9:fe7de0e11862 | 184 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 10:be7bcb936dcd | 185 | TestNDO.LAST_NAV_DATA[cons_mile_p]=0.2; |
gstedile | 10:be7bcb936dcd | 186 | TestNDO.LAST_NAV_DATA[speed_p]=16; |
gstedile | 10:be7bcb936dcd | 187 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 10:be7bcb936dcd | 188 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 10:be7bcb936dcd | 189 | TestNDO.LAST_NAV_DATA[cons_mile_p]=0.35; |
gstedile | 10:be7bcb936dcd | 190 | TestNDO.LAST_NAV_DATA[speed_p]=17; |
gstedile | 10:be7bcb936dcd | 191 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 10:be7bcb936dcd | 192 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 10:be7bcb936dcd | 193 | TestNDO.LAST_NAV_DATA[cons_mile_p]=0.1; |
gstedile | 9:fe7de0e11862 | 194 | TestNDO.LAST_NAV_DATA[speed_p]=30; |
gstedile | 9:fe7de0e11862 | 195 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 9:fe7de0e11862 | 196 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 10:be7bcb936dcd | 197 | TestNDO.LAST_NAV_DATA[cons_mile_p]=0.15; |
gstedile | 10:be7bcb936dcd | 198 | TestNDO.LAST_NAV_DATA[speed_p]=32; |
gstedile | 10:be7bcb936dcd | 199 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 10:be7bcb936dcd | 200 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 10:be7bcb936dcd | 201 | TestNDO.LAST_NAV_DATA[cons_mile_p]=0.12; |
gstedile | 10:be7bcb936dcd | 202 | TestNDO.LAST_NAV_DATA[speed_p]=34; |
gstedile | 10:be7bcb936dcd | 203 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 10:be7bcb936dcd | 204 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 10:be7bcb936dcd | 205 | TestNDO.LAST_NAV_DATA[cons_mile_p]=0.25; |
gstedile | 10:be7bcb936dcd | 206 | TestNDO.LAST_NAV_DATA[speed_p]=(Test_Matrix_VCO.vel_max)-1; |
gstedile | 9:fe7de0e11862 | 207 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 9:fe7de0e11862 | 208 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 9:fe7de0e11862 | 209 | Test_Matrix_VCO.interpolate(); |
gstedile | 9:fe7de0e11862 | 210 | |
gstedile | 9:fe7de0e11862 | 211 | /*for (int i=0;i<30;i++){ |
gstedile | 6:aebb3a0a040c | 212 | TestNDO.LAST_NAV_DATA[cons_mile_p]=i+1; |
gstedile | 5:56d63eaa8415 | 213 | TestNDO.LAST_NAV_DATA[speed_p]=i; |
gstedile | 5:56d63eaa8415 | 214 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 5:56d63eaa8415 | 215 | } |
gstedile | 7:93da358c67a1 | 216 | for (int i=30,x=30;i>1;i--,x++){ |
gstedile | 5:56d63eaa8415 | 217 | TestNDO.LAST_NAV_DATA[cons_mile_p]=i; |
gstedile | 5:56d63eaa8415 | 218 | TestNDO.LAST_NAV_DATA[speed_p]=x; |
gstedile | 5:56d63eaa8415 | 219 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 5:56d63eaa8415 | 220 | } |
gstedile | 8:941a76c2d300 | 221 | TestNDO.LAST_NAV_DATA[cons_mile_p]=1; |
gstedile | 8:941a76c2d300 | 222 | TestNDO.LAST_NAV_DATA[speed_p]=55; |
gstedile | 8:941a76c2d300 | 223 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 7:93da358c67a1 | 224 | for (int i=1,x=59;i<40;i++,x++){ |
gstedile | 7:93da358c67a1 | 225 | TestNDO.LAST_NAV_DATA[cons_mile_p]=i+1; |
gstedile | 7:93da358c67a1 | 226 | TestNDO.LAST_NAV_DATA[speed_p]=x; |
gstedile | 7:93da358c67a1 | 227 | Test_Matrix_VCO.store_data(TestNDO); |
gstedile | 9:fe7de0e11862 | 228 | }*/ |
gstedile | 5:56d63eaa8415 | 229 | } |
gstedile | 5:56d63eaa8415 | 230 | |
gstedile | 0:d92271b032c7 | 231 | |
gstedile | 0:d92271b032c7 | 232 | int main() |
gstedile | 0:d92271b032c7 | 233 | { |
gstedile | 0:d92271b032c7 | 234 | pc.baud(460800); // I like a snappy terminal, so crank it up! |
gstedile | 0:d92271b032c7 | 235 | pc.printf("\r\nRA8875 Soft Fonts - Build " __DATE__ " " __TIME__ "\r\n"); |
gstedile | 0:d92271b032c7 | 236 | |
gstedile | 0:d92271b032c7 | 237 | lcd.init(); |
gstedile | 6:aebb3a0a040c | 238 | |
gstedile | 6:aebb3a0a040c | 239 | lcd.TouchPanelCalibrate("Calibrate the touch panel"); // 4 touch |
gstedile | 6:aebb3a0a040c | 240 | lcd.cls(); |
gstedile | 6:aebb3a0a040c | 241 | |
gstedile | 6:aebb3a0a040c | 242 | rect_t PrintScreenRect = { 425-65, 20, 425+65, 60}; |
gstedile | 6:aebb3a0a040c | 243 | |
gstedile | 4:9901f6da64b7 | 244 | |
gstedile | 4:9901f6da64b7 | 245 | // ************************** |
gstedile | 0:d92271b032c7 | 246 | //RunTestSet(lcd, pc); // If the library was compiled for test mode... |
gstedile | 0:d92271b032c7 | 247 | |
gstedile | 0:d92271b032c7 | 248 | lcd.foreground(RGB(255,255,0)); // Seteo del color de las letras. |
gstedile | 0:d92271b032c7 | 249 | lcd.SelectUserFont(BPG_Arial20x20); // Seleccion de tipo y tamaño de letras |
gstedile | 0:d92271b032c7 | 250 | //lcd.puts("BPG_Arial63x63"); |
gstedile | 6:aebb3a0a040c | 251 | |
gstedile | 0:d92271b032c7 | 252 | GPS gps(p9, p10); // Agrego para comunicacion con el GPS |
gstedile | 0:d92271b032c7 | 253 | |
gstedile | 0:d92271b032c7 | 254 | |
gstedile | 4:9901f6da64b7 | 255 | //---------------------------------------------------- |
gstedile | 4:9901f6da64b7 | 256 | // Sensor de flujo: |
gstedile | 0:d92271b032c7 | 257 | //----------------------------------------------------- |
gstedile | 0:d92271b032c7 | 258 | InterruptIn pulse_sensor(p11); // Defino pulse_sensor como una entrada de interrupción en p11. |
gstedile | 0:d92271b032c7 | 259 | pulse_sensor.mode(PullUp); // PullUp para esa entrada. |
gstedile | 0:d92271b032c7 | 260 | //DigitalOut led(LED1); |
gstedile | 0:d92271b032c7 | 261 | pulse_sensor.rise(&trigger); // Dispara interrupción con flanco ascendente. (Podría tambien ser desecendente--> fall) |
gstedile | 0:d92271b032c7 | 262 | |
gstedile | 4:9901f6da64b7 | 263 | |
gstedile | 4:9901f6da64b7 | 264 | |
gstedile | 4:9901f6da64b7 | 265 | |
gstedile | 4:9901f6da64b7 | 266 | while(1) { |
gstedile | 4:9901f6da64b7 | 267 | |
gstedile | 5:56d63eaa8415 | 268 | lcd.SetTextCursor(0,0); // Pongo cursor en posicion |
gstedile | 5:56d63eaa8415 | 269 | lcd.puts(">>>>>>>>>>>>>< Proyecto SNOCC ><<<<<<<<<<<<<<\r\n"); |
gstedile | 4:9901f6da64b7 | 270 | |
gstedile | 0:d92271b032c7 | 271 | |
gstedile | 0:d92271b032c7 | 272 | //----------------------------------------------------- |
gstedile | 0:d92271b032c7 | 273 | |
gstedile | 3:0c9ee19fb976 | 274 | //lcd.SetTextCursor(0,20); |
gstedile | 0:d92271b032c7 | 275 | //lcd.printf("M0: %s \r\n\r\n", gps.msg); //Imprimo el mensaje crudo proveniente de la uart |
gstedile | 9:fe7de0e11862 | 276 | |
gstedile | 0:d92271b032c7 | 277 | |
gstedile | 0:d92271b032c7 | 278 | if(gps.sample()) { // Si es exitosa la obtencion de datos del gps. |
gstedile | 10:be7bcb936dcd | 279 | poll_init=1; |
gstedile | 3:0c9ee19fb976 | 280 | lcd.cls(); |
gstedile | 5:56d63eaa8415 | 281 | lcd.SetTextCursor(0,0); // Pongo cursor en posicion |
gstedile | 5:56d63eaa8415 | 282 | lcd.puts(">>>>>>>>>>>>>< Proyecto SNOCC ><<<<<<<<<<<<<<\r\n"); |
gstedile | 3:0c9ee19fb976 | 283 | |
gstedile | 4:9901f6da64b7 | 284 | if (NAVIGATION_TABLE.rotate_data(gps.longitude, gps.latitude, gps.time, Counter)){ |
gstedile | 9:fe7de0e11862 | 285 | NAVIGATION_VMATRIX.store_data(NAVIGATION_TABLE);// Luego de rotar los datos en la tabla de navegacion, la guarda en la matriz segun criterios de la clase VCODATA |
gstedile | 5:56d63eaa8415 | 286 | lcd.puts("Rotacion exitosa!-->"); |
gstedile | 8:941a76c2d300 | 287 | int i=int(NAVIGATION_TABLE.LAST_NAV_DATA[speed_p]); |
gstedile | 8:941a76c2d300 | 288 | int VCO=NAVIGATION_VMATRIX.get_VCO(); |
gstedile | 9:fe7de0e11862 | 289 | float timetick_f_Last = NAVIGATION_TABLE.LAST_NAV_DATA[speed_p]; // DEBUG |
gstedile | 4:9901f6da64b7 | 290 | float timetick_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[time_f]; // DEBUG |
gstedile | 4:9901f6da64b7 | 291 | float distance_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[distance_p]; // DEBUG |
gstedile | 4:9901f6da64b7 | 292 | float speed_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[speed_p]; // DEBUG |
gstedile | 9:fe7de0e11862 | 293 | float speed_p_Last = NAVIGATION_TABLE.LAST_NAV_DATA[speed_p]; // DEBUG |
gstedile | 4:9901f6da64b7 | 294 | float longitude_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[longitude_f]; // DEBUG |
gstedile | 4:9901f6da64b7 | 295 | float latitude_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[latitude_f]; // DEBUG |
gstedile | 4:9901f6da64b7 | 296 | float cons_hour_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[cons_hour_p]; |
gstedile | 8:941a76c2d300 | 297 | float cons_mile_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[cons_mile_p]; |
gstedile | 8:941a76c2d300 | 298 | //lcd.printf("Algunos datos guardados en la Matriz: \r\n"); // DEBUG |
gstedile | 8:941a76c2d300 | 299 | lcd.printf("INDICE_Mtrx: %d\r\n\r\n",i); // DEBUG |
gstedile | 8:941a76c2d300 | 300 | lcd.printf("Speed_f_Mtrx(%d): %f kn.\r\n",i, speed_p_Mtrx); // DEBUG |
gstedile | 9:fe7de0e11862 | 301 | lcd.printf("Speed_f_Last(%d): %f km/h.\r\n\r\n",i, speed_p_Last*1.852); // DEBUG |
gstedile | 8:941a76c2d300 | 302 | lcd.printf("Time_f_Mtrx(%d): %f Hours.\r\n",i, timetick_f_Mtrx); // DEBUG |
gstedile | 9:fe7de0e11862 | 303 | lcd.printf("Time_f_Last(%d): %f Hours.\r\n",i, timetick_f_Last); // DEBUG |
gstedile | 8:941a76c2d300 | 304 | lcd.printf("Dist_p_Mtrx(%d): %f miles.\r\n",i,distance_p_Mtrx); // DEBUG |
gstedile | 8:941a76c2d300 | 305 | lcd.printf("Posicion: Long(%d): %f ; Lat: %f\r\n",i,longitude_f_Mtrx,latitude_f_Mtrx); // DEBUG |
gstedile | 8:941a76c2d300 | 306 | lcd.printf("FlujoVCOmtrx(%d): %f Litros/Hora\r\n",i, cons_hour_p_Mtrx); // DEBUG |
gstedile | 8:941a76c2d300 | 307 | lcd.printf("FlujoVCOmtrx(%d): %f Litros/Milla\r\n",i, cons_mile_p_Mtrx); // DEBUG |
gstedile | 9:fe7de0e11862 | 308 | lcd.printf("Cons. Acumulado: %f l\r\n", LCounter); |
gstedile | 8:941a76c2d300 | 309 | lcd.printf("VCO: %d km/h\r\n", VCO); |
gstedile | 9:fe7de0e11862 | 310 | |
gstedile | 9:fe7de0e11862 | 311 | |
gstedile | 9:fe7de0e11862 | 312 | NAVIGATION_VMATRIX.interpolate(); |
gstedile | 9:fe7de0e11862 | 313 | |
gstedile | 6:aebb3a0a040c | 314 | //build_test_Mtrx(NAVIGATION_VMATRIX); // DEBUG Curve |
gstedile | 9:fe7de0e11862 | 315 | //print_VCO_curve(NAVIGATION_VMATRIX,1); |
gstedile | 4:9901f6da64b7 | 316 | } |
gstedile | 3:0c9ee19fb976 | 317 | else |
gstedile | 4:9901f6da64b7 | 318 | { |
gstedile | 3:0c9ee19fb976 | 319 | lcd.puts("Periodo no valido!\r\n"); |
gstedile | 4:9901f6da64b7 | 320 | int i=int(NAVIGATION_TABLE.LAST_NAV_DATA[speed_p]); |
gstedile | 4:9901f6da64b7 | 321 | float timetick_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[time_f]; // DEBUG |
gstedile | 4:9901f6da64b7 | 322 | float distance_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[distance_p]; // DEBUG |
gstedile | 4:9901f6da64b7 | 323 | float speed_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[speed_p]; // DEBUG |
gstedile | 4:9901f6da64b7 | 324 | float longitude_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[longitude_f]; // DEBUG |
gstedile | 4:9901f6da64b7 | 325 | float latitude_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[latitude_f]; // DEBUG |
gstedile | 4:9901f6da64b7 | 326 | float cons_hour_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[cons_hour_p]; // DEBUG |
gstedile | 4:9901f6da64b7 | 327 | lcd.printf("Algunos datos guardados en la Matriz: \r\n"); // DEBUG |
gstedile | 5:56d63eaa8415 | 328 | lcd.printf("INDICE_Mtrx: %d (Parte entera de speed)\r\n",i); // DEBUG |
gstedile | 5:56d63eaa8415 | 329 | lcd.printf("Speed_f_Mtrx(%d): %f kn.\r\n",i, speed_p_Mtrx); // DEBUG |
gstedile | 5:56d63eaa8415 | 330 | lcd.printf("Time_f_Mtrx(%d): %f Hours.\r\n",i, timetick_f_Mtrx); // DEBUG |
gstedile | 5:56d63eaa8415 | 331 | lcd.printf("Distance_p_Mtrx(%d): %f miles.\r\n",i,distance_p_Mtrx); // DEBUG |
gstedile | 5:56d63eaa8415 | 332 | lcd.printf("Posicion: Long(%d): %f, Lat: %f\r\n",i,longitude_f_Mtrx,latitude_f_Mtrx); // DEBUG |
gstedile | 5:56d63eaa8415 | 333 | lcd.printf("FlujoVCOmtrx(%d): %f Litros/Hora\r\n",i, cons_hour_p_Mtrx); // DEBUG |
gstedile | 4:9901f6da64b7 | 334 | } |
gstedile | 9:fe7de0e11862 | 335 | |
gstedile | 0:d92271b032c7 | 336 | |
gstedile | 4:9901f6da64b7 | 337 | } |
gstedile | 4:9901f6da64b7 | 338 | else { |
gstedile | 0:d92271b032c7 | 339 | lcd.cls(); |
gstedile | 5:56d63eaa8415 | 340 | lcd.SetTextCursor(0,0); // Pongo cursor en posicion |
gstedile | 5:56d63eaa8415 | 341 | lcd.puts(">>>>>>>>>>>>>< Proyecto SNOCC ><<<<<<<<<<<<<<\r\n"); |
gstedile | 0:d92271b032c7 | 342 | lcd.SetTextCursor(0,100); |
gstedile | 6:aebb3a0a040c | 343 | lcd.printf("Aun no hay datos disponibles :(\r\n"); |
gstedile | 3:0c9ee19fb976 | 344 | lcd.SetTextCursor(0,180); |
gstedile | 6:aebb3a0a040c | 345 | lcd.printf("Timetick %f h\r\n", NAVIGATION_TABLE.LAST_NAV_DATA[time_f]); |
gstedile | 6:aebb3a0a040c | 346 | lcd.printf("Flujo Mtrx: %f Litros/Hora\r\n", NAVIGATION_TABLE.LAST_NAV_DATA[cons_hour_p]); |
gstedile | 6:aebb3a0a040c | 347 | lcd.printf("Flujo Counter: %f Litros\r\n", LCounter); |
gstedile | 9:fe7de0e11862 | 348 | |
gstedile | 10:be7bcb936dcd | 349 | //if (poll_init==0) build_test_Mtrx(NAVIGATION_VMATRIX); //DEBUG |
gstedile | 9:fe7de0e11862 | 350 | |
gstedile | 0:d92271b032c7 | 351 | } |
gstedile | 6:aebb3a0a040c | 352 | |
gstedile | 10:be7bcb936dcd | 353 | //lcd.puts(425-90, 22, "ANTES DEL FOR");// DEBUG |
gstedile | 6:aebb3a0a040c | 354 | |
gstedile | 8:941a76c2d300 | 355 | for (int i=0;i<200;i++) { |
gstedile | 10:be7bcb936dcd | 356 | |
gstedile | 6:aebb3a0a040c | 357 | point_t p; |
gstedile | 6:aebb3a0a040c | 358 | lcd.fillrect(PrintScreenRect, Green); |
gstedile | 6:aebb3a0a040c | 359 | lcd.foreground(Blue); |
gstedile | 6:aebb3a0a040c | 360 | lcd.background(Green); |
gstedile | 6:aebb3a0a040c | 361 | lcd.puts(425-60, 22, "GET CURVE"); |
gstedile | 6:aebb3a0a040c | 362 | lcd.background(Black); |
gstedile | 9:fe7de0e11862 | 363 | //wait_us(1); |
gstedile | 6:aebb3a0a040c | 364 | if (lcd.TouchPanelReadable(&p)) { |
gstedile | 6:aebb3a0a040c | 365 | //lcd.foreground(Blue); |
gstedile | 6:aebb3a0a040c | 366 | //lcd.SetTextCursor(10, 15); |
gstedile | 6:aebb3a0a040c | 367 | //lcd.printf("(%3d,%3d)", p.x, p.y); |
gstedile | 6:aebb3a0a040c | 368 | //lcd.foreground(RGB(255,255,0)); |
gstedile | 6:aebb3a0a040c | 369 | |
gstedile | 6:aebb3a0a040c | 370 | if (Intersect(PrintScreenRect, p)) { |
gstedile | 6:aebb3a0a040c | 371 | lcd.foreground(Red); |
gstedile | 6:aebb3a0a040c | 372 | lcd.puts(400-38, 20, "GET CURVE"); |
gstedile | 10:be7bcb936dcd | 373 | build_test_Mtrx(NAVIGATION_VMATRIX); // DEBUG Curve |
gstedile | 10:be7bcb936dcd | 374 | NAVIGATION_V_SMOOTH_MTRX.smooth(3, NAVIGATION_VMATRIX); |
gstedile | 10:be7bcb936dcd | 375 | //lcd.puts(425-120, 22, "ANTES de PRINT"); //DEBUG |
gstedile | 10:be7bcb936dcd | 376 | print_VCO_curve(NAVIGATION_VMATRIX,0); // Valores recolectados |
gstedile | 10:be7bcb936dcd | 377 | wait(2); |
gstedile | 10:be7bcb936dcd | 378 | print_VCO_curve(NAVIGATION_VMATRIX,1); // Interpolados (puntos) |
gstedile | 10:be7bcb936dcd | 379 | wait(3); |
gstedile | 10:be7bcb936dcd | 380 | print_VCO_curve(NAVIGATION_V_SMOOTH_MTRX,1); // Suavizado (puntos) |
gstedile | 10:be7bcb936dcd | 381 | wait(3); |
gstedile | 10:be7bcb936dcd | 382 | |
gstedile | 10:be7bcb936dcd | 383 | print_VCO_curve(NAVIGATION_VMATRIX,2); // Interpolados (lineas) |
gstedile | 10:be7bcb936dcd | 384 | wait(3); |
gstedile | 10:be7bcb936dcd | 385 | print_VCO_curve(NAVIGATION_V_SMOOTH_MTRX,2); // Suavizados (lineas) |
gstedile | 10:be7bcb936dcd | 386 | wait(3); |
gstedile | 6:aebb3a0a040c | 387 | break; |
gstedile | 6:aebb3a0a040c | 388 | //GetScreenCapture(); |
gstedile | 6:aebb3a0a040c | 389 | } |
gstedile | 6:aebb3a0a040c | 390 | |
gstedile | 10:be7bcb936dcd | 391 | } |
gstedile | 6:aebb3a0a040c | 392 | lcd.foreground(RGB(255,255,0)); |
gstedile | 6:aebb3a0a040c | 393 | } |
gstedile | 6:aebb3a0a040c | 394 | } |
gstedile | 4:9901f6da64b7 | 395 | } |
gstedile | 6:aebb3a0a040c | 396 | |
gstedile | 6:aebb3a0a040c | 397 |