GPS Tracker with a TFT display, GPLV3

Dependencies:   MAX17055 MAX32620FTHR MAX77650 SerialGPS

Committer:
DimiterK
Date:
Sat Aug 18 22:34:58 2018 +0000
Revision:
0:48d0ba737b93
GPS tracker , Hackster Contest, August 2018; Release under GPLv3,

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DimiterK 0:48d0ba737b93 1
DimiterK 0:48d0ba737b93 2 #include "mbed.h"
DimiterK 0:48d0ba737b93 3 #include <math.h>
DimiterK 0:48d0ba737b93 4 #include <stdlib.h>
DimiterK 0:48d0ba737b93 5
DimiterK 0:48d0ba737b93 6 #include "SerialGPS.h"
DimiterK 0:48d0ba737b93 7 #include "LCD_Driver.h"
DimiterK 0:48d0ba737b93 8 #include "LCD_GUI.h"
DimiterK 0:48d0ba737b93 9 #include "MAX32620FTHR.h"
DimiterK 0:48d0ba737b93 10 #include "MAX77650.h"
DimiterK 0:48d0ba737b93 11 #include "MAX17055.h"
DimiterK 0:48d0ba737b93 12
DimiterK 0:48d0ba737b93 13 #include "GPSimg.h"
DimiterK 0:48d0ba737b93 14 #include "BatteryImg.h"
DimiterK 0:48d0ba737b93 15
DimiterK 0:48d0ba737b93 16
DimiterK 0:48d0ba737b93 17 #define POWER_HOLD_OFF 0
DimiterK 0:48d0ba737b93 18 #define POWER_HOLD_ON 1
DimiterK 0:48d0ba737b93 19
DimiterK 0:48d0ba737b93 20 // Configure GPIO voltage
DimiterK 0:48d0ba737b93 21 MAX32620FTHR max32620fthr(MAX32620FTHR::VIO_3V3);
DimiterK 0:48d0ba737b93 22
DimiterK 0:48d0ba737b93 23 #define BACKGROUND BLACK
DimiterK 0:48d0ba737b93 24 #define FOREGROUND YELLOW
DimiterK 0:48d0ba737b93 25 #define DELAY 1000
DimiterK 0:48d0ba737b93 26
DimiterK 0:48d0ba737b93 27 I2C i2c(I2C2_SDA, I2C2_SCL);
DimiterK 0:48d0ba737b93 28 DigitalOut myled(LED1);
DimiterK 0:48d0ba737b93 29 SerialGPS gps(P3_1, P3_0,9600);
DimiterK 0:48d0ba737b93 30
DimiterK 0:48d0ba737b93 31 MAX17055 max17055(i2c); // Fuel gauge
DimiterK 0:48d0ba737b93 32 MAX77650 max77650(i2c); // MAX77650 PMIC and Charger
DimiterK 0:48d0ba737b93 33
DimiterK 0:48d0ba737b93 34 // Configure PMIC to drive green LED
DimiterK 0:48d0ba737b93 35 static const char ledGreen[] = {
DimiterK 0:48d0ba737b93 36 MAX77650::CNFG_LED0_A,
DimiterK 0:48d0ba737b93 37 0x04, 0x44, 0x04,
DimiterK 0:48d0ba737b93 38 0x0F, 0x0F, 0x0F,
DimiterK 0:48d0ba737b93 39 0x01,
DimiterK 0:48d0ba737b93 40 };
DimiterK 0:48d0ba737b93 41
DimiterK 0:48d0ba737b93 42 DigitalOut pw_Hold(P2_2, POWER_HOLD_ON);
DimiterK 0:48d0ba737b93 43 //SDFileSystem sd(P0_5, P0_6, P0_4, P1_3, "sd"); // the pinout on the mbed Cool Components workshop board
DimiterK 0:48d0ba737b93 44
DimiterK 0:48d0ba737b93 45
DimiterK 0:48d0ba737b93 46 int main() {
DimiterK 0:48d0ba737b93 47
DimiterK 0:48d0ba737b93 48 // Configure TFT display
DimiterK 0:48d0ba737b93 49 LCD_SCAN_DIR LCD_ScanDir = SCAN_DIR_DFT;//SCAN_DIR_DFT = D2U_L2R
DimiterK 0:48d0ba737b93 50 LCD_Init(LCD_ScanDir );
DimiterK 0:48d0ba737b93 51
DimiterK 0:48d0ba737b93 52 wait_ms(1000);
DimiterK 0:48d0ba737b93 53
DimiterK 0:48d0ba737b93 54 LCD_Clear(BLACK);
DimiterK 0:48d0ba737b93 55 GUI_DrawRectangle(0,0,156,127,RED,DRAW_EMPTY,DOT_PIXEL_2X2);
DimiterK 0:48d0ba737b93 56 myled = !myled; // toggle a led
DimiterK 0:48d0ba737b93 57
DimiterK 0:48d0ba737b93 58 char sats[16] = {};
DimiterK 0:48d0ba737b93 59 char longitude[16] = {};
DimiterK 0:48d0ba737b93 60 char latitude[16] = {};
DimiterK 0:48d0ba737b93 61 char geoid[16] = {};
DimiterK 0:48d0ba737b93 62 char altitude[16] = {};
DimiterK 0:48d0ba737b93 63 char time[16] = {};
DimiterK 0:48d0ba737b93 64
DimiterK 0:48d0ba737b93 65 char voltage[16] = {};
DimiterK 0:48d0ba737b93 66 char avgVoltage[16] = {};
DimiterK 0:48d0ba737b93 67 char current[16] = {};
DimiterK 0:48d0ba737b93 68
DimiterK 0:48d0ba737b93 69 ///int status;
DimiterK 0:48d0ba737b93 70 float f_value;
DimiterK 0:48d0ba737b93 71
DimiterK 0:48d0ba737b93 72 // Configure fuel gauge
DimiterK 0:48d0ba737b93 73 // Set sense resistor value
DimiterK 0:48d0ba737b93 74 max17055.init(0.05f);
DimiterK 0:48d0ba737b93 75
DimiterK 0:48d0ba737b93 76 // Turn off Low-Dropout Linear Regulator (LDO); unused on MAX32620FTHR platform
DimiterK 0:48d0ba737b93 77 max77650.disableLDO();
DimiterK 0:48d0ba737b93 78
DimiterK 0:48d0ba737b93 79 // Set SIMO Buck-Boost Regulator 2 target voltage; provides VDDIOH
DimiterK 0:48d0ba737b93 80 max77650.setSBB2Voltage(3.3f);
DimiterK 0:48d0ba737b93 81
DimiterK 0:48d0ba737b93 82 // Turn PMIC green LED on, red and blue off
DimiterK 0:48d0ba737b93 83 max77650.writeReg(ledGreen, sizeof(ledGreen));
DimiterK 0:48d0ba737b93 84
DimiterK 0:48d0ba737b93 85
DimiterK 0:48d0ba737b93 86 while(1) {
DimiterK 0:48d0ba737b93 87
DimiterK 0:48d0ba737b93 88 wait(0.5f); // wait a small period of time
DimiterK 0:48d0ba737b93 89
DimiterK 0:48d0ba737b93 90 if (gps.sample()) {
DimiterK 0:48d0ba737b93 91 myled = myled ? 0 : 1;
DimiterK 0:48d0ba737b93 92 //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);
DimiterK 0:48d0ba737b93 93
DimiterK 0:48d0ba737b93 94 sprintf(sats, "SAT: %d ", gps.sats);
DimiterK 0:48d0ba737b93 95 sprintf(longitude, "LONG: %2.2f ", gps.longitude);
DimiterK 0:48d0ba737b93 96 sprintf(latitude, "LAT: %2.2f ", gps.latitude);
DimiterK 0:48d0ba737b93 97 sprintf(altitude, "ALT: %2.2f ", gps.alt);
DimiterK 0:48d0ba737b93 98 sprintf(geoid, "GEOID: %2.2f ", gps.geoid);
DimiterK 0:48d0ba737b93 99 sprintf(time, "TIME: %2.2f ", gps.time);
DimiterK 0:48d0ba737b93 100
DimiterK 0:48d0ba737b93 101 LCD_Clear(BLACK);
DimiterK 0:48d0ba737b93 102 GUI_DisplayImage(50,10,gps_lock,50,50);
DimiterK 0:48d0ba737b93 103 GUI_DrawRectangle(0,0,156,127,YELLOW,DRAW_EMPTY,DOT_PIXEL_2X2);
DimiterK 0:48d0ba737b93 104
DimiterK 0:48d0ba737b93 105 GUI_DisString_EN(10,80,sats,&Font12,GUI_BACKGROUND,YELLOW);
DimiterK 0:48d0ba737b93 106 GUI_DisString_EN(10,90,longitude,&Font12,GUI_BACKGROUND,YELLOW);
DimiterK 0:48d0ba737b93 107 GUI_DisString_EN(10,100,latitude,&Font12,GUI_BACKGROUND,YELLOW);
DimiterK 0:48d0ba737b93 108 GUI_DisString_EN(10,110,altitude,&Font12,GUI_BACKGROUND,CYAN);
DimiterK 0:48d0ba737b93 109 //GUI_DisString_EN(10,90,geoid,&Font12,GUI_BACKGROUND,CYAN);
DimiterK 0:48d0ba737b93 110 //GUI_DisString_EN(10,110,time,&Font12,GUI_BACKGROUND,CYAN);
DimiterK 0:48d0ba737b93 111
DimiterK 0:48d0ba737b93 112 wait(2);
DimiterK 0:48d0ba737b93 113 LCD_Clear(BLACK);
DimiterK 0:48d0ba737b93 114
DimiterK 0:48d0ba737b93 115 // Print formatted voltage, and battery current
DimiterK 0:48d0ba737b93 116 max17055.v_cell(&f_value);
DimiterK 0:48d0ba737b93 117 sprintf(voltage,"V=%6.2fV", f_value);
DimiterK 0:48d0ba737b93 118 //max17055.avg_v_cell(&f_value);
DimiterK 0:48d0ba737b93 119 //sprintf(avgVoltage,"Vavg = %6.3f", f_value);
DimiterK 0:48d0ba737b93 120 max17055.current(&f_value);
DimiterK 0:48d0ba737b93 121 sprintf(current,"I=%6.2fmA", f_value);
DimiterK 0:48d0ba737b93 122 //max17055.avg_current(&f_value);
DimiterK 0:48d0ba737b93 123
DimiterK 0:48d0ba737b93 124 GUI_DisplayImage(50,10,batt_full,50,50);
DimiterK 0:48d0ba737b93 125 GUI_DisString_EN(10,70,voltage,&Font20,GUI_BACKGROUND,YELLOW);
DimiterK 0:48d0ba737b93 126 //GUI_DisString_EN(10,90,avgVoltage,&Font12,GUI_BACKGROUND,YELLOW);
DimiterK 0:48d0ba737b93 127 GUI_DisString_EN(10,100,current,&Font20,GUI_BACKGROUND,CYAN);
DimiterK 0:48d0ba737b93 128
DimiterK 0:48d0ba737b93 129 wait(2);
DimiterK 0:48d0ba737b93 130
DimiterK 0:48d0ba737b93 131
DimiterK 0:48d0ba737b93 132 }
DimiterK 0:48d0ba737b93 133 myled = !myled; // toggle a led
DimiterK 0:48d0ba737b93 134 }
DimiterK 0:48d0ba737b93 135 }
DimiterK 0:48d0ba737b93 136
DimiterK 0:48d0ba737b93 137