GPS Tracker with a TFT display, GPLV3
Dependencies: MAX17055 MAX32620FTHR MAX77650 SerialGPS
main.cpp@0:48d0ba737b93, 2018-08-18 (annotated)
- 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?
User | Revision | Line number | New 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 |