NMEA0813フォーマットのGPSから情報を取り出すプログラムです。
Dependents: GPS_test EM_Logger
Revision 4:7be9581d0734, committed 2013-08-16
- Comitter:
- YSB
- Date:
- Fri Aug 16 08:22:08 2013 +0000
- Parent:
- 2:7870c69fa58c
- Commit message:
- 20130816ver
Changed in this revision
nmea0813.cpp | Show annotated file Show diff for this revision Revisions of this file |
nmea0813.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 7870c69fa58c -r 7be9581d0734 nmea0813.cpp --- a/nmea0813.cpp Fri Jul 05 04:17:36 2013 +0000 +++ b/nmea0813.cpp Fri Aug 16 08:22:08 2013 +0000 @@ -9,95 +9,70 @@ void GPS::rxHandler(void){ - char rxbuf; rxbuf = getc(); GPSdata[count] = rxbuf; - if(rxbuf == '$'){ - count++; - } - else if(rxbuf == LF){ - count++; + if(rxbuf == LF){ flg++; - } - else{ - count++; - } + }else{} + count++; if(flg == 7){ flg = 0; + GPSdata[count+1]='\0'; count=0; } } void GPS::update_infomation() { //repeatedlly called function - get_GGA_RMC(GPSdata); - get_infomation(GPGGA,GPRMC); + set_GGA_RMC(GPSdata); } -void GPS::get_GGA_RMC(char* str){ - int nullflg=0; +void GPS::set_GGA_RMC(char* str){ char *sp; - sp = (char*) strstr(str,"$GPGGA"); - for(int i=0;i<80;i++){ - if(nullflg ==0){ - if(sp[i] != '\n'){ + if(sp != NULL){ + for(int i=0;i<100;i++){ + if(sp[i] != '*'){ GPGGA[i] = sp[i]; }else{ - GPGGA[i] = '\n'; - nullflg = 1; - } - }else{ - GPGGA[i] = '\n'; - } + GPGGA[i] = '*'; + GPGGA[i+1] = '\0'; + //gga_checksum = sp[i+1]*16+sp[i+2]; + i = 100; + } + } } - nullflg = 0; sp = (char*) strstr(str,"$GPRMC"); - for(int i=0;i<80;i++){ - if(nullflg ==0){ - if(sp[i] != '\n'){ + if(sp != NULL){ + for(int i=0;i<100;i++){ + if(sp[i] != '*'){ GPRMC[i] = sp[i]; }else{ - GPRMC[i] = '\n'; - nullflg = 1; - } - }else{ - GPRMC[i] = '\n'; - } - } - nullflg = 0; -} - -void GPS::get_infomation(char* gga,char* rmc){ - time_str[0]=gga[7]; - time_str[1]=gga[8]; - time_str[2]=':'; - time_str[3]=gga[9]; - time_str[4]=gga[10]; - time_str[5]=':'; - time_str[6]=gga[11]; - time_str[7]=gga[12]; - //time_str[8]='\n'; - - status = rmc[18]; - - number_of_satelite = gga[46]; - - for(int i=0;i<9;i++){ - latitude_str[i]=gga[18+i]; - } - for(int i=0;i<10;i++){ - longitude_str[i]=gga[30+i]; - } - for(int i=0;i<5;i++){ - speed_str[i]=rmc[51+i]; - } + GPRMC[i] = '*'; + GPRMC[i+1] = '\0'; + //rmc_checksum = sp[i+1]*16+sp[i+2]; + i = 100; + } + } + } } char* GPS::get_time(){ + time_str[0]=GPGGA[7]; + time_str[1]=GPGGA[8]; + time_str[2]=':'; + time_str[3]=GPGGA[9]; + time_str[4]=GPGGA[10]; + time_str[5]=':'; + time_str[6]=GPGGA[11]; + time_str[7]=GPGGA[12]; + time_str[8]='\0'; + return time_str; } float GPS::get_latitude(){ + for(int i=0;i<9;i++){latitude_str[i]=GPGGA[18+i];} + latitude_str[9]='\0'; latitude = (float)(latitude_str[0]-0x30)*10.0+ \ (float)(latitude_str[1]-0x30)+ \ ((float)(latitude_str[2]-0x30)*10.0+ \ @@ -110,10 +85,14 @@ } char* GPS::get_str_latitude(){ + for(int i=0;i<9;i++){latitude_str[i]=GPGGA[18+i];} + latitude_str[9]='\0'; return latitude_str; } float GPS::get_longitude(){ + for(int i=0;i<10;i++){longitude_str[i]=GPGGA[30+i];} + longitude_str[10]='\0'; longitude = (float)(longitude_str[0]-0x30)*100.0+ \ (float)(longitude_str[1]-0x30)*10.0+ \ (float)(longitude_str[2]-0x30)+ \ @@ -127,14 +106,19 @@ } char* GPS::get_str_longitude(){ + for(int i=0;i<10;i++){longitude_str[i]=GPGGA[30+i];} + longitude_str[10]='\0'; return longitude_str; } char GPS::get_status(){ + status = GPRMC[18]; return status; } float GPS::get_speed(){ + for(int i=0;i<5;i++){speed_str[i]=GPRMC[51+i];} + speed_str[5]='\0'; speed = (float)(speed_str[0]-0x30)*100.0+\ (float)(speed_str[1]-0x30)*10.0+\ (float)(speed_str[2]-0x30)*1.0+\ @@ -142,6 +126,7 @@ return speed; } -char GPS::get_satelite_number(){ +int GPS::get_satelite_number(){ + number_of_satelite = (int)(GPGGA[45]-0x30)*10 + (int)(GPGGA[46]-0x30); return number_of_satelite; } \ No newline at end of file
diff -r 7870c69fa58c -r 7be9581d0734 nmea0813.h --- a/nmea0813.h Fri Jul 05 04:17:36 2013 +0000 +++ b/nmea0813.h Fri Aug 16 08:22:08 2013 +0000 @@ -16,28 +16,28 @@ char* get_str_longitude(); char get_status(); float get_speed(); - char get_satelite_number(); + int get_satelite_number(); private: - char GPSdata[1000]; //gps_data_buffer + char GPSdata[500];//gps_data_buffer char GPGGA[100];//GPGGA_data char GPRMC[100];//GPRMC_data char time_str[9]; - char latitude_str[9]; + char latitude_str[10]; float latitude; - char longitude_str[10]; + char longitude_str[11]; float longitude; char status; - char number_of_satelite; - char speed_str[5]; + int number_of_satelite; + char speed_str[6]; float speed; int flg,count;//for rx_func() + char rxbuf,gga_checksum,rmc_checksum; void rxHandler(void); void update_infomation(); - void get_GGA_RMC(char* str); - void get_infomation(char* gga,char* rmc); + void set_GGA_RMC(char* str); Ticker T; };