#include "main.h" #include "EC800M.h" typedef struct GPS_ { char time[10]; char N[20]; char E[20]; } GPS_; float convertToDecimal(float coordinate) { int degree = (int)(coordinate / 100); float minutes = coordinate - degree * 100; return degree + minutes / 60; } void Data_parsing(char *gps_data, GPS_ * gps_) { char *p = strchr(gps_data, ':'); char *p1 = strstr(p + 2, "\r\n"); char GPS_DATA_[p1 - p]; memset(GPS_DATA_, 0, p1 - p); memcpy(GPS_DATA_, p + 2, p1 - p - 2 + 1); //printf("%s\n", GPS_DATA_); char *token = strtok(GPS_DATA_, ","); int i = 1; while (token != NULL) { if (i == 1) { strcpy(gps_->time, token); } if (i == 2) { strcpy(gps_->N, token); } if (i == 3) { strcpy(gps_->E, token); } token = strtok(NULL, ","); i++; } gps_->N[strlen(gps_->N) - 1] = '\0'; gps_->E[strlen(gps_->E) - 1] = '\0'; //printf("GPS : %.6f, %.6f\n", convertToDecimal(atof(gps_->N)), convertToDecimal(atof(gps_->E))); // 095921.00 char hours[3] = { 0 }; char minutes[3] = { 0 }; char seconds[9] = { 0 }; char *p2 = gps_->time; memcpy(hours, p2, 2); memcpy(minutes, p2 + 2, 2); memcpy(seconds, p2 + 4, 2); //printf("GPS 修正时间: %d:%s:%s\n", atoi(hours) + 8, minutes, seconds); sprintf(gps_->time, "%d:%s:%s", atoi(hours) + 8, minutes, seconds); sprintf(gps_->N, "%.6f", convertToDecimal(atof(gps_->N))); sprintf(gps_->E, "%.6f", convertToDecimal(atof(gps_->E))); } int main(void) { stdio_init_all(); sleep_ms(1000); printf("EC800M\n"); EC800M_INIT(); char gps_data[1024] = { 0 }; GPS_ gps_; while (1) { strcpy(gps_data, EC800M()); Data_parsing(gps_data, &gps_); printf(" T: %s\n N: %s\n E: %s\n", gps_.time, gps_.N, gps_.E); printf("\r\n"); sleep_ms(3000); } return 0; }