GPS
Dependents: CameraC1098_GPS_different_Lib
Revision 0:1be20a74923d, committed 2017-08-03
- Comitter:
- hepta2ume
- Date:
- Thu Aug 03 04:28:24 2017 +0000
- Commit message:
- test
Changed in this revision
HeptaGPS.cpp | Show annotated file Show diff for this revision Revisions of this file |
HeptaGPS.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 1be20a74923d HeptaGPS.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HeptaGPS.cpp Thu Aug 03 04:28:24 2017 +0000 @@ -0,0 +1,167 @@ +#include "HeptaGPS.h" +#include "mbed.h" + +HeptaGPS::HeptaGPS(PinName tx, PinName rx) : gps(tx,rx) +{ +} +void HeptaGPS::baud(int rate) +{ + gps.baud(rate); +} +char HeptaGPS::getc() +{ + c = gps.getc(); + return c; +} +int HeptaGPS::readable() +{ + i = gps.readable(); + return i; +} +void HeptaGPS::flushSerialBuffer(void) +{ + ite = 0; + while (gps.readable()) + { + gps.getc(); + ite++; + if(ite==100){break;}; + } + return; +} +void HeptaGPS::gga_sensing(float *time, float *latitude, char *ns, float *longitude, char *ew, int *quality, int *stnum, float *hacu, float *altitude, char *aunit, int *gps_check) +{ + int ite = 0; + while(gps.getc()!='$'){ + ite++; + if(ite==10000) break; + } + for(int i=0; i<5; i++){ + msg[i] = gps.getc(); + } + if((msg[2]=='G')&(msg[3]=='G')&(msg[4]=='A')){ + for(int j=0; j<6; j++){ + if(j==0){ + for(int i=5; i<256; i++){ + msg[i] = gps.getc(); + if(msg[i] == '\r') { + msg[i] = 0; + break; + } + } + }else{ + for(int i=0; i<256; i++){ + msgd[i] = gps.getc(); + if(msgd[i] == '\r') { + break; + } + } + if((msgd[4]=='V')&(msgd[5]=='T')&(msgd[6]=='G')){ + break; + } + } + } + if(sscanf(msg, "GPGGA,%f,%f,%c,%f,%c,%d,%d,%f,%f,%c", time, latitude, ns, longitude, ew, quality, stnum, hacu, altitude, aunit) >= 1) { + if(!(quality)) { + //latitude(unit transformation) + *latitude=int(*latitude/100)+(*latitude-int(*latitude/100)*100)/60; + //longitude(unit transformation) + *longitude = int(*longitude/100)+(*longitude-int(*longitude/100)*100)/60; + *gps_check = 0; + } else { + //latitude(unit transformation) + *latitude=int(*latitude/100)+(*latitude-int(*latitude/100)*100)/60; + //longitude(unit transformation) + *longitude = int(*longitude/100)+(*longitude-int(*longitude/100)*100)/60; + *gps_check = 1; + } + } + else{ + printf("No Data"); + *gps_check = 2; + } + } + else{ + *gps_check = 3; + } +} +void HeptaGPS::lat_log_sensing_u16(char *lat, char *log, int *dsize) +{ + char gph1[8]={0x00},gph2[8]={0x00},gph3[8]={0x00},gph4[8]={0x00},gpt1[8]={0x00},gpt2[8]={0x00},gpt3[8]={0x00},gpt4[8]={0x00}; + int i=0,j=0; + while (gps.readable()){ + gps.getc(); + } + loop: + while(gps.getc()!='$'){} + for(j=0;j<5;j++){ + gps_data[1][j]=gps.getc(); + } + if((gps_data[1][2]==0x52)&(gps_data[1][3]==0x4d)&(gps_data[1][4]==0x43)){ + for(j=0;j<1;j++){ + if(j==0){ + i=0; + while((gps_data[j+1][i+5] = gps.getc()) != '\r'){ + //pc.putc(gps_data[j+1][i+5]); + i++; + } + gps_data[j+1][i+5]='\0'; + i=0; + //pc.printf("\n\r"); + } + else{ + while(gps.getc()!='$'){} + i=0; + while((gps_data[j+1][i] = gps.getc()) != '\r'){ + //pc.putc(gps_data[j+1][i]); + i++; + } + gps_data[j+1][i]='\0'; + i=0; + //pc.printf("\n\r"); + } + } + } + else + { + goto loop; + } + if( sscanf(gps_data[1],"GPRMC,%f,%c,%f,%c,%f,%c,%f",&time,&statas,&hokui,&ns,&tokei,&ew,&vel) >= 1){ + //hokui + d_hokui=int(hokui/100); + m_hokui=(hokui-d_hokui*100); + //m_hokui=(hokui-d_hokui*100)/60; + g_hokui=d_hokui+(hokui-d_hokui*100)/60; + sprintf( gph1, "%02X", (char(d_hokui)) & 0xFF); + sprintf( gph2, "%02X", (char(m_hokui)) & 0xFF); + sprintf( gph3, "%02X", (char((m_hokui-char(m_hokui))*100)) & 0xFF); + sprintf( gph4, "%02X", (char(((m_hokui-char(m_hokui))*100-char((m_hokui-char(m_hokui))*100))*100)) & 0xFF); + + //tokei + d_tokei=int(tokei/100); + m_tokei=(tokei-d_tokei*100); + //m_tokei=(tokei-d_tokei*100)/60; + g_tokei=d_tokei+(tokei-d_tokei*100)/60; + sprintf( gpt1, "%02X", (char(d_tokei)) & 0xFF); + sprintf( gpt2, "%02X", (char(m_tokei)) & 0xFF); + sprintf( gpt3, "%02X", (char((m_tokei-char(m_tokei))*100)) & 0xFF); + sprintf( gpt4, "%02X", (char(((m_tokei-char(m_tokei))*100-char((m_tokei-char(m_tokei))*100))*100)) & 0xFF); + lat[0] = gph1[0]; + lat[1] = gph1[1]; + lat[2] = gph2[0]; + lat[3] = gph2[1]; + lat[4] = gph3[0]; + lat[5] = gph3[1]; + lat[6] = gph4[0]; + lat[7] = gph4[1]; + log[0] = gpt1[0]; + log[1] = gpt1[1]; + log[2] = gpt2[0]; + log[3] = gpt2[1]; + log[4] = gpt3[0]; + log[5] = gpt3[1]; + log[6] = gpt4[0]; + log[7] = gpt4[1]; + } + *dsize = 8; +} \ No newline at end of file
diff -r 000000000000 -r 1be20a74923d HeptaGPS.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HeptaGPS.h Thu Aug 03 04:28:24 2017 +0000 @@ -0,0 +1,29 @@ +#ifndef MBED_HEPTAGPS_H +#define MBED_HEPTAGPS_H +#include "mbed.h" + +class HeptaGPS{ +public: + Serial gps; + HeptaGPS( + PinName tx, + PinName rx + ); + void baud(int rate); + char getc(); + int readable(); + void flushSerialBuffer(void); + void gga_sensing(float *time, float *latitude, char *ns, float *longitude, char *ew, int *quality, int *stnum, float *hacu, float *altitude, char *aunit, int *gps_check); + void lat_log_sensing_u16(char *lat, char *log, int *dsize); +private: + char msg[256],msgd[256]; + int i,ite,rlock,stn; + char c; + char gps_data[7][1000]; + char ns,ew,statas; + float time,hokui,tokei,vel; + float g_hokui,g_tokei; + float d_hokui,m_hokui,d_tokei,m_tokei; + int h_time,m_time,s_time; +}; +#endif \ No newline at end of file