First Final Version, Will probably need revision with regards to LCD and maybe the clock

Dependencies:   mbed HTTPClient MMA8452Q mbed-rtos 4DGL-uLCD-SE NTPClient SDFileSystem1 EthernetInterface

Revision:
0:070ff55a028f
Child:
1:b0c480b628cd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Dec 16 18:52:01 2020 +0000
@@ -0,0 +1,84 @@
+#include "mbed.h"
+#include "NTPClient.h"
+#include "uLCD_4DGL.h"
+#include "EthernetInterface.h"
+#include "HTTPClient.h"
+//Geolocation output to LCD
+//Code based on: https://os.mbed.com/users/tlisowski3/notebook/geolocation-and-ntp-clock-on-ulcd-144-g2/
+
+//Set up Networking and LCD
+EthernetInterface eth;
+uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
+NTPClient ntpClient;
+HTTPClient httpClient;
+
+void parse(char buffer[], int *j, char *string); //FUNCTION TO PARSE HTTP GET DATA
+char httpGetData[200]; //BUFFER TO HOLD DATA FROM HTTP GET REQUEST
+ 
+int main() {
+    //Display Settings
+    uLCD.baudrate(115200); //Baudrate of display
+    uLCD.cls();    //Clear uLCD screen
+    uLCD.background_color(BLACK); //SET BACKGROUND COLOR TO WHITE
+    uLCD.color(WHITE);
+    uLCD.locate(0,0);  //Start printing on col0, row0
+    uLCD.printf("Getting Location \nInformation...");
+
+    eth.init(); //USE DHCP to get local IP address
+    eth.connect(); //Connect to the network
+        
+    char success[10]={0};  //success first
+    char countryFull[20]={0}; //Full Country Name
+    char countryAbrv[5]={0}; //Abbreviated Country Name or country Code
+    char stateAbrv[5]={0}; //Abbreviated State or region code
+    char stateFull[15]={0}; //Full State Name
+    char city[15]={0}; //City Name
+    char zip[6]={0}; //ZIP CODE
+    char latitude[10]={0}; //latitude
+    char longitude[10]={0}; //longitude
+    char timeZone[30]={0}; //timeZone
+    int j=0;
+    HTTPResult r = httpClient.get("http://ip-api.com/csv",httpGetData,128); //GET GEOLOCATION DATA (CSV)
+    
+    if (r==HTTP_OK) { //IF THE DATA WAS RECIEVED
+        j=0;
+        //parse and display each of the API's location information strings on the LCD
+        parse(httpGetData, &j, success); 
+        parse(httpGetData,&j,countryFull);
+        parse(httpGetData,&j,countryAbrv);
+        parse(httpGetData,&j,stateAbrv);
+        parse(httpGetData,&j,stateFull);
+        parse(httpGetData,&j,city);
+        parse(httpGetData,&j,zip);
+        parse(httpGetData,&j,latitude);
+        parse(httpGetData,&j,longitude);
+        parse(httpGetData,&j,timeZone);
+    } 
+    else { //HTTP GET REQUEST ERRORED
+        uLCD.cls();
+        uLCD.printf("HTTP Error %d", r);
+        return -1;
+    }
+
+    //Print Location Information
+    uLCD.cls();
+    uLCD.locate(0,0);
+    uLCD.printf("%s, %s\n",city,countryFull); //Print City and Country
+    uLCD.printf("LAT:%s\nLONG:%s\n",latitude,longitude); //LATITUDE AND LONGITUDE 
+    uLCD.printf("Timezone:\n%s",timeZone); //PRINT TIMEZONE
+    eth.disconnect(); //DISCONNECT FROM THE NETWORK 
+}
+
+//SET FOR CSV FORMAT: NEEDS TO BE EDITED IF DIFFERENT FORMAT
+void parse(char buffer[], int *j, char *string) {
+//extracts next location string data item from buffer
+    int i=0;
+    for (i=0; i<=strlen(buffer); i++) {  //TOTAL SIZE OF RETURNED DATA
+        if ((buffer[*j+i] == ',')||(buffer[*j+i] == '\0' )) { //IF comma or end of string
+            //comma is the string field delimiter
+            string[i]=0; //SETS END OF SRTRING TO 0
+            *j=*j+i+1; //UPDATES to 1 after comma seperated value
+            break;
+        } else string[i]=buffer[*j+i]; //Keep adding to the string
+    }
+}