GPS Tracker with a TFT display, GPLV3
Dependencies: MAX17055 MAX32620FTHR MAX77650 SerialGPS
Diff: main.cpp
- Revision:
- 0:48d0ba737b93
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Aug 18 22:34:58 2018 +0000 @@ -0,0 +1,137 @@ + +#include "mbed.h" +#include <math.h> +#include <stdlib.h> + +#include "SerialGPS.h" +#include "LCD_Driver.h" +#include "LCD_GUI.h" +#include "MAX32620FTHR.h" +#include "MAX77650.h" +#include "MAX17055.h" + +#include "GPSimg.h" +#include "BatteryImg.h" + + +#define POWER_HOLD_OFF 0 +#define POWER_HOLD_ON 1 + +// Configure GPIO voltage +MAX32620FTHR max32620fthr(MAX32620FTHR::VIO_3V3); + +#define BACKGROUND BLACK +#define FOREGROUND YELLOW +#define DELAY 1000 + +I2C i2c(I2C2_SDA, I2C2_SCL); +DigitalOut myled(LED1); +SerialGPS gps(P3_1, P3_0,9600); + +MAX17055 max17055(i2c); // Fuel gauge +MAX77650 max77650(i2c); // MAX77650 PMIC and Charger + +// Configure PMIC to drive green LED +static const char ledGreen[] = { + MAX77650::CNFG_LED0_A, + 0x04, 0x44, 0x04, + 0x0F, 0x0F, 0x0F, + 0x01, +}; + +DigitalOut pw_Hold(P2_2, POWER_HOLD_ON); +//SDFileSystem sd(P0_5, P0_6, P0_4, P1_3, "sd"); // the pinout on the mbed Cool Components workshop board + + +int main() { + + // Configure TFT display + LCD_SCAN_DIR LCD_ScanDir = SCAN_DIR_DFT;//SCAN_DIR_DFT = D2U_L2R + LCD_Init(LCD_ScanDir ); + + wait_ms(1000); + + LCD_Clear(BLACK); + GUI_DrawRectangle(0,0,156,127,RED,DRAW_EMPTY,DOT_PIXEL_2X2); + myled = !myled; // toggle a led + + char sats[16] = {}; + char longitude[16] = {}; + char latitude[16] = {}; + char geoid[16] = {}; + char altitude[16] = {}; + char time[16] = {}; + + char voltage[16] = {}; + char avgVoltage[16] = {}; + char current[16] = {}; + + ///int status; + float f_value; + + // Configure fuel gauge + // Set sense resistor value + max17055.init(0.05f); + + // Turn off Low-Dropout Linear Regulator (LDO); unused on MAX32620FTHR platform + max77650.disableLDO(); + + // Set SIMO Buck-Boost Regulator 2 target voltage; provides VDDIOH + max77650.setSBB2Voltage(3.3f); + + // Turn PMIC green LED on, red and blue off + max77650.writeReg(ledGreen, sizeof(ledGreen)); + + + while(1) { + + wait(0.5f); // wait a small period of time + + if (gps.sample()) { + myled = myled ? 0 : 1; + //pc.printf("sats %d, long %f, lat %f, alt %f, geoid %f, time %f\n\r", gps.sats, gps.longitude, gps.latitude, gps.alt, gps.geoid, gps.time); + + sprintf(sats, "SAT: %d ", gps.sats); + sprintf(longitude, "LONG: %2.2f ", gps.longitude); + sprintf(latitude, "LAT: %2.2f ", gps.latitude); + sprintf(altitude, "ALT: %2.2f ", gps.alt); + sprintf(geoid, "GEOID: %2.2f ", gps.geoid); + sprintf(time, "TIME: %2.2f ", gps.time); + + LCD_Clear(BLACK); + GUI_DisplayImage(50,10,gps_lock,50,50); + GUI_DrawRectangle(0,0,156,127,YELLOW,DRAW_EMPTY,DOT_PIXEL_2X2); + + GUI_DisString_EN(10,80,sats,&Font12,GUI_BACKGROUND,YELLOW); + GUI_DisString_EN(10,90,longitude,&Font12,GUI_BACKGROUND,YELLOW); + GUI_DisString_EN(10,100,latitude,&Font12,GUI_BACKGROUND,YELLOW); + GUI_DisString_EN(10,110,altitude,&Font12,GUI_BACKGROUND,CYAN); + //GUI_DisString_EN(10,90,geoid,&Font12,GUI_BACKGROUND,CYAN); + //GUI_DisString_EN(10,110,time,&Font12,GUI_BACKGROUND,CYAN); + + wait(2); + LCD_Clear(BLACK); + + // Print formatted voltage, and battery current + max17055.v_cell(&f_value); + sprintf(voltage,"V=%6.2fV", f_value); + //max17055.avg_v_cell(&f_value); + //sprintf(avgVoltage,"Vavg = %6.3f", f_value); + max17055.current(&f_value); + sprintf(current,"I=%6.2fmA", f_value); + //max17055.avg_current(&f_value); + + GUI_DisplayImage(50,10,batt_full,50,50); + GUI_DisString_EN(10,70,voltage,&Font20,GUI_BACKGROUND,YELLOW); + //GUI_DisString_EN(10,90,avgVoltage,&Font12,GUI_BACKGROUND,YELLOW); + GUI_DisString_EN(10,100,current,&Font20,GUI_BACKGROUND,CYAN); + + wait(2); + + + } + myled = !myled; // toggle a led + } +} + +