Para Juan
Dependencies: NAVDATA RA8875 mbed VCODATA
main.cpp
- Committer:
- gstedile
- Date:
- 2017-04-08
- Revision:
- 5:56d63eaa8415
- Parent:
- 4:9901f6da64b7
- Child:
- 6:aebb3a0a040c
File content as of revision 5:56d63eaa8415:
#include "mbed.h" // v112 #include "RA8875.h" // v102 #include "MyFont18x32.h" #include "BPG_Arial08x08.h" #include "BPG_Arial10x10.h" #include "BPG_Arial20x20.h" #include "BPG_Arial31x32.h" #include "BPG_Arial63x63.h" // Agrego includes para uso en la comunicacion con el gps. #include "GPS.h" // Agrego includes para la clase NAVDATA que maneja los datos de navegación del último período. #include "NAVDATA.h" // Agrego includes para la clase VCODATA que maneja los datos de navegación más recientes parametrizados por velocidad de cada período. #include "VCODATA.h" #include <sstream> //include this to use string streams #include <string> float Counter=0; //Contador de pulsos del sensor de flujo. float LCounter=0; //Consumo en litros float Consumo_km=0; //Consumo en litros/km. NAVDATA NAVIGATION_TABLE; //Objeto que maneja los datos de navegación del último período. $ VCODATA NAVIGATION_VMATRIX(NAVIGATION_TABLE); // Objeto que maneja la matriz de datos de navegación $ LocalFileSystem local("local"); // Because I want <PrintScreen> Serial pc(USBTX, USBRX); // And a little feedback RA8875 lcd(p5, p6, p7, p12, NC, "tft"); // MOSI, MISO, SCK, /ChipSelect, /reset, name void trigger() { //Función para la interrupción Counter++; LCounter=Counter/2500; //point_t p_cursor = lcd.GetTextCursor(); //lcd.SetTextCursor(0,200); //lcd.printf("Flujo %d pulsos", Counter); //lcd.SetTextCursor(p_cursor); } /* 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.*/ void print_VCO_curve(VCODATA Matrix_VCO){ int s,y,z; for (int x=0;x<100;x++){ s = Matrix_VCO.NAV_DATA[x].LAST_NAV_DATA[cons_mile_p]; y=200-2*s; // el consumo máximo es alrededor de 100 l/m. Multiplico por 2 para que ocupe mas pantalla. z=x*4; // para aumentar el span (eje x) lcd.SetTextCursor(z,y); //lcd.printf("%d",x); lcd.printf("."); } } /* Funcion build_test_Mtrx: Carga los datos del vector LAST_NAV_DATA de los objetos NAVDATA de VCODATA para testing.*/ void build_test_Mtrx(VCODATA Test_Matrix_VCO){ NAVDATA TestNDO; for (int i=0;i<50;i++){ TestNDO.LAST_NAV_DATA[cons_mile_p]=i; TestNDO.LAST_NAV_DATA[speed_p]=i; Test_Matrix_VCO.store_data(TestNDO); } for (int i=50,x=50;i>0;i--,x++){ TestNDO.LAST_NAV_DATA[cons_mile_p]=i; TestNDO.LAST_NAV_DATA[speed_p]=x; Test_Matrix_VCO.store_data(TestNDO); } } int main() { pc.baud(460800); // I like a snappy terminal, so crank it up! pc.printf("\r\nRA8875 Soft Fonts - Build " __DATE__ " " __TIME__ "\r\n"); lcd.init(); // ************************** //RunTestSet(lcd, pc); // If the library was compiled for test mode... lcd.foreground(RGB(255,255,0)); // Seteo del color de las letras. lcd.SelectUserFont(BPG_Arial20x20); // Seleccion de tipo y tamaño de letras //lcd.puts("BPG_Arial63x63"); GPS gps(p9, p10); // Agrego para comunicacion con el GPS //Inicializo variables para el sensor de flujo //---------------------------------------------------- DigitalOut myled(LED1); DigitalOut myled2(LED2); DigitalOut myled3(LED3); DigitalOut myled4(LED4); //DebounceIn pb(p8); /*DigitalIn pb(p11); int count=0; //Comento esto porque voy a usar interrupciones int old_pb=0; int new_pb; // Use internal pullup for pushbutton pb.mode(PullUp); //pb.mode(PullNone); // Delay for initial pullup to take effect wait(.001);*/ //---------------------------------------------------- // Sensor de flujo: //----------------------------------------------------- InterruptIn pulse_sensor(p11); // Defino pulse_sensor como una entrada de interrupción en p11. pulse_sensor.mode(PullUp); // PullUp para esa entrada. //DigitalOut led(LED1); pulse_sensor.rise(&trigger); // Dispara interrupción con flanco ascendente. (Podría tambien ser desecendente--> fall) while(1) { lcd.SetTextCursor(0,0); // Pongo cursor en posicion lcd.puts(">>>>>>>>>>>>>< Proyecto SNOCC ><<<<<<<<<<<<<<\r\n"); //----------------------------------------------------- //lcd.SetTextCursor(0,20); //lcd.printf("M0: %s \r\n\r\n", gps.msg); //Imprimo el mensaje crudo proveniente de la uart //lcd.printf("M1: %s \r\n", gps.mensaje1); //lcd.printf("M2: %s \r\n", gps.mensaje2); //lcd.printf("M3: %s \r\n", gps.mensaje3); //lcd.printf("M4: %s \r\n", gps.mensaje4); //lcd.printf("Posicion actual_0: %f, %f \r\n", gps.longitude, gps.latitude); //lcd.printf("Contador = %d", Counter); if(gps.sample()) { // Si es exitosa la obtencion de datos del gps. lcd.cls(); lcd.SetTextCursor(0,0); // Pongo cursor en posicion lcd.puts(">>>>>>>>>>>>>< Proyecto SNOCC ><<<<<<<<<<<<<<\r\n"); if (NAVIGATION_TABLE.rotate_data(gps.longitude, gps.latitude, gps.time, Counter)){ NAVIGATION_VMATRIX.store_data(NAVIGATION_TABLE);// Luego de rotar los datos en la tabla de navegacion, la guarda en la matriz, // en el lugar correspondiente a la velocidad del preiodo (por ahora reemplaza...ver otras opciones) lcd.puts("Rotacion exitosa!-->"); int i=int(NAVIGATION_TABLE.LAST_NAV_DATA[speed_p]); float timetick_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[time_f]; // DEBUG float distance_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[distance_p]; // DEBUG float speed_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[speed_p]; // DEBUG float longitude_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[longitude_f]; // DEBUG float latitude_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[latitude_f]; // DEBUG float cons_hour_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[cons_hour_p]; //lcd.printf("Algunos datos guardados en la Matriz: \r\n"); // DEBUG lcd.printf("INDICE_Mtrx: %d\r\n",i); // DEBUG /*lcd.printf("Speed_f_Mtrx(%d): %f kn.\r\n",i, speed_p_Mtrx); // DEBUG lcd.printf("Time_f_Mtrx(%d): %f Hours.\r\n",i, timetick_f_Mtrx); // DEBUG lcd.printf("Distance_p_Mtrx(%d): %f miles.\r\n",i,distance_p_Mtrx); // DEBUG lcd.printf("Posicion: Long(%d): %f, Lat: %f\r\n",i,longitude_f_Mtrx,latitude_f_Mtrx); // DEBUG lcd.printf("FlujoVCOmtrx(%d): %f Litros/Hora\r\n",i, cons_hour_p_Mtrx); // DEBUG */ build_test_Mtrx(NAVIGATION_VMATRIX); // DEBUG Curve print_VCO_curve(NAVIGATION_VMATRIX); } else { lcd.puts("Periodo no valido!\r\n"); int i=int(NAVIGATION_TABLE.LAST_NAV_DATA[speed_p]); float timetick_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[time_f]; // DEBUG float distance_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[distance_p]; // DEBUG float speed_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[speed_p]; // DEBUG float longitude_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[longitude_f]; // DEBUG float latitude_f_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[latitude_f]; // DEBUG float cons_hour_p_Mtrx = NAVIGATION_VMATRIX.NAV_DATA[i].LAST_NAV_DATA[cons_hour_p]; // DEBUG lcd.printf("Algunos datos guardados en la Matriz: \r\n"); // DEBUG lcd.printf("INDICE_Mtrx: %d (Parte entera de speed)\r\n",i); // DEBUG lcd.printf("Speed_f_Mtrx(%d): %f kn.\r\n",i, speed_p_Mtrx); // DEBUG lcd.printf("Time_f_Mtrx(%d): %f Hours.\r\n",i, timetick_f_Mtrx); // DEBUG lcd.printf("Distance_p_Mtrx(%d): %f miles.\r\n",i,distance_p_Mtrx); // DEBUG lcd.printf("Posicion: Long(%d): %f, Lat: %f\r\n",i,longitude_f_Mtrx,latitude_f_Mtrx); // DEBUG lcd.printf("FlujoVCOmtrx(%d): %f Litros/Hora\r\n",i, cons_hour_p_Mtrx); // DEBUG } /* lcd.SetTextCursor(0,80); //lcd.printf("Posicion: %f, %f\r\n", gps.longitude, gps.latitude); lcd.printf("Posicion: %f, %f\r\n", NAVIGATION_TABLE.LAST_NAV_DATA[longitude_f], NAVIGATION_TABLE.LAST_NAV_DATA[latitude_f]); // $ //lcd.printf("Velocidad %f km/h", gps.speed); lcd.printf("Distancia_p %f km\r\n", NAVIGATION_TABLE.LAST_NAV_DATA[distance_p]); lcd.printf("Velocidad %f km/h\r\n", NAVIGATION_TABLE.LAST_NAV_DATA[speed_p]); lcd.printf("Timetick_i %f h\r\n", NAVIGATION_TABLE.LAST_NAV_DATA[time_i]); lcd.printf("Timetick_f %f h\r\n", NAVIGATION_TABLE.LAST_NAV_DATA[time_f]); lcd.printf("Timetick_gps %f NMEA\r\n", gps.time); // lcd.printf("Consumo %f l/km", getConsumo(Count; gps.speed); */ //lcd.SetTextCursor(0,220); //lcd.printf("Flujo %f Litros/Hora\r\n", NAVIGATION_TABLE.LAST_NAV_DATA[cons_hour_p]); //lcd.printf("FlujoVCOmtrx %f Litros/Hora\r\n", cons_hour_p_Mtrx); //lcd.printf("Flujo acumulado (contador):%f Litros\r\n", LCounter); } else { lcd.cls(); lcd.SetTextCursor(0,0); // Pongo cursor en posicion lcd.puts(">>>>>>>>>>>>>< Proyecto SNOCC ><<<<<<<<<<<<<<\r\n"); lcd.SetTextCursor(0,100); lcd.printf("No hay datos disponibles :(\r\n"); lcd.SetTextCursor(0,180); lcd.printf("Timestick %f km/h\r\n", NAVIGATION_TABLE.LAST_NAV_DATA[time_f]); lcd.printf("Flujo %f Litros/Hora\r\n", NAVIGATION_TABLE.LAST_NAV_DATA[cons_hour_p]); lcd.printf("Flujo %f Litros\r\n", LCounter); } } }