Guillermo Stedile / Mbed 2 deprecated SNOCC_V1

Dependencies:   NAVDATA RA8875 mbed VCODATA

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?

UserRevisionLine numberNew 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