NMEA0813フォーマットのGPSから情報を取り出すプログラムです。
Dependents: GPS_test EM_Logger
nmea0813.cpp
- Committer:
- YSB
- Date:
- 2013-08-16
- Revision:
- 4:7be9581d0734
- Parent:
- 2:7870c69fa58c
File content as of revision 4:7be9581d0734:
#include "nmea0813.h" GPS::GPS(PinName tx,PinName rx) : Serial(tx,rx){ flg = 0; count = 0; attach(this, &GPS::rxHandler,Serial::RxIrq); T.attach(this,&GPS::update_infomation,1.0); } void GPS::rxHandler(void){ rxbuf = getc(); GPSdata[count] = rxbuf; if(rxbuf == LF){ flg++; }else{} count++; if(flg == 7){ flg = 0; GPSdata[count+1]='\0'; count=0; } } void GPS::update_infomation() { //repeatedlly called function set_GGA_RMC(GPSdata); } void GPS::set_GGA_RMC(char* str){ char *sp; sp = (char*) strstr(str,"$GPGGA"); if(sp != NULL){ for(int i=0;i<100;i++){ if(sp[i] != '*'){ GPGGA[i] = sp[i]; }else{ GPGGA[i] = '*'; GPGGA[i+1] = '\0'; //gga_checksum = sp[i+1]*16+sp[i+2]; i = 100; } } } sp = (char*) strstr(str,"$GPRMC"); if(sp != NULL){ for(int i=0;i<100;i++){ if(sp[i] != '*'){ GPRMC[i] = sp[i]; }else{ 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+ \ (float)(latitude_str[3]-0x30)+ \ (float)(latitude_str[5]-0x30)*0.1+ \ (float)(latitude_str[6]-0x30)*0.01+ \ (float)(latitude_str[7]-0x30)*0.001+ \ (float)(latitude_str[8]-0x30)*0.0001)/60.0; return latitude; } 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)+ \ ((float)(longitude_str[3]-0x30)*10.0+ \ (float)(longitude_str[4]-0x30)+ \ (float)(longitude_str[6]-0x30)*0.1+ \ (float)(longitude_str[7]-0x30)*0.01+ \ (float)(longitude_str[8]-0x30)*0.001+ \ (float)(longitude_str[9]-0x30)*0.0001)/60.0; return longitude; } 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+\ (float)(speed_str[4]-0x30)*0.1; return speed; } int GPS::get_satelite_number(){ number_of_satelite = (int)(GPGGA[45]-0x30)*10 + (int)(GPGGA[46]-0x30); return number_of_satelite; }