Mbed library to get location informatiuon from GYSFDMAXB

Dependents:   nucleo_GPS_rev3 STM32_MR_include_IM_rev2

秋月電子のGPS受信機キット 1PPS出力付き 「みちびき」対応からデータを取得するためのライブラリです クラスを宣言した後、変数のlongtitude,latitudeを読むことでデータを取得できます。更新は自動です。 googleで検索できるdd.dddd°表記となっています。

Committer:
kim1212
Date:
Sun Jul 30 13:52:03 2017 +0000
Revision:
4:2bd79a04305a
Parent:
1:68601d2af8a5
Child:
2:bd69260c2bd1
????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kim1212 0:4cc88ba7719b 1 #include "mbed.h"
kim1212 0:4cc88ba7719b 2 #include "GPS.h"
kim1212 0:4cc88ba7719b 3
kim1212 0:4cc88ba7719b 4 GPS::GPS(PinName gpstx,PinName gpsrx): _gps(gpstx,gpsrx)
kim1212 0:4cc88ba7719b 5 {
kim1212 1:68601d2af8a5 6 latitude=0;
kim1212 1:68601d2af8a5 7 longtitude=0;
kim1212 1:68601d2af8a5 8
kim1212 0:4cc88ba7719b 9 gpscmd("314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0");
kim1212 0:4cc88ba7719b 10 int odr=ODR;
kim1212 0:4cc88ba7719b 11 odr=1000/odr;
kim1212 0:4cc88ba7719b 12 sprintf(buf,"300,%d,0,0,0,0",odr);
kim1212 0:4cc88ba7719b 13 gpscmd(buf);
kim1212 0:4cc88ba7719b 14
kim1212 0:4cc88ba7719b 15 int baud=GPSBAUD;
kim1212 0:4cc88ba7719b 16
kim1212 0:4cc88ba7719b 17 for(int i=0;i<100;i++){
kim1212 0:4cc88ba7719b 18 buf[i]=0;
kim1212 0:4cc88ba7719b 19 }
kim1212 0:4cc88ba7719b 20
kim1212 0:4cc88ba7719b 21 sprintf(buf,"251,%d",baud);
kim1212 0:4cc88ba7719b 22
kim1212 0:4cc88ba7719b 23 gpscmd(buf);
kim1212 0:4cc88ba7719b 24 gpscmd(buf);
kim1212 0:4cc88ba7719b 25
kim1212 0:4cc88ba7719b 26
kim1212 0:4cc88ba7719b 27 _gps.baud(GPSBAUD);
kim1212 0:4cc88ba7719b 28
kim1212 0:4cc88ba7719b 29 _gps.attach(this,&GPS::getgps);
kim1212 0:4cc88ba7719b 30 }
kim1212 0:4cc88ba7719b 31
kim1212 0:4cc88ba7719b 32 void GPS::gpscmd(char *command)
kim1212 0:4cc88ba7719b 33 {
kim1212 0:4cc88ba7719b 34 int len=strlen(command);
kim1212 0:4cc88ba7719b 35 char xordata[len+4];
kim1212 0:4cc88ba7719b 36 sprintf(xordata,"PMTK%s",command);
kim1212 0:4cc88ba7719b 37
kim1212 0:4cc88ba7719b 38
kim1212 0:4cc88ba7719b 39 char xorbuf=0x00;
kim1212 0:4cc88ba7719b 40 for(int i=0;i<len+4;i++){
kim1212 0:4cc88ba7719b 41 xorbuf=xorbuf^xordata[i];
kim1212 0:4cc88ba7719b 42 }
kim1212 0:4cc88ba7719b 43
kim1212 0:4cc88ba7719b 44
kim1212 0:4cc88ba7719b 45 char packet[len+8];
kim1212 0:4cc88ba7719b 46 if(xorbuf>0x0f){
kim1212 0:4cc88ba7719b 47 sprintf(packet,"$%s*%x",xordata,xorbuf);
kim1212 0:4cc88ba7719b 48 }
kim1212 0:4cc88ba7719b 49 else {
kim1212 0:4cc88ba7719b 50 sprintf(packet,"$%s*0%x",xordata,xorbuf);
kim1212 0:4cc88ba7719b 51 }
kim1212 0:4cc88ba7719b 52
kim1212 0:4cc88ba7719b 53
kim1212 0:4cc88ba7719b 54 _gps.printf(packet);
kim1212 0:4cc88ba7719b 55 _gps.putc(0x0D);
kim1212 0:4cc88ba7719b 56 _gps.putc(0x0A);
kim1212 0:4cc88ba7719b 57 }
kim1212 0:4cc88ba7719b 58
kim1212 0:4cc88ba7719b 59 void GPS::getgps()
kim1212 0:4cc88ba7719b 60 {
kim1212 0:4cc88ba7719b 61 if(_gps.getc()=='$'){
kim1212 0:4cc88ba7719b 62
kim1212 0:4cc88ba7719b 63 int counter;
kim1212 0:4cc88ba7719b 64 char sample=0x00;
kim1212 0:4cc88ba7719b 65
kim1212 0:4cc88ba7719b 66 int point1=0;
kim1212 0:4cc88ba7719b 67 int point2=0;
kim1212 0:4cc88ba7719b 68
kim1212 0:4cc88ba7719b 69
kim1212 0:4cc88ba7719b 70 for(counter=0;counter<18;counter++){
kim1212 0:4cc88ba7719b 71 sample=_gps.getc();
kim1212 0:4cc88ba7719b 72 }
kim1212 0:4cc88ba7719b 73
kim1212 0:4cc88ba7719b 74 if(sample=='A'){
kim1212 0:4cc88ba7719b 75
kim1212 0:4cc88ba7719b 76 //初期化
kim1212 0:4cc88ba7719b 77 latitude=0;
kim1212 0:4cc88ba7719b 78 longtitude=0;
kim1212 0:4cc88ba7719b 79
kim1212 0:4cc88ba7719b 80 //データ取得
kim1212 0:4cc88ba7719b 81 for(counter=0;sample!='\n';counter++){
kim1212 0:4cc88ba7719b 82 sample=_gps.getc();
kim1212 0:4cc88ba7719b 83 buf[counter]=sample;
kim1212 0:4cc88ba7719b 84
kim1212 0:4cc88ba7719b 85 if(buf[counter]=='.'&&point1==0){
kim1212 0:4cc88ba7719b 86 point1=counter;
kim1212 0:4cc88ba7719b 87 }
kim1212 0:4cc88ba7719b 88
kim1212 0:4cc88ba7719b 89 if(counter>8&&buf[counter]=='.'&&point2==0){
kim1212 0:4cc88ba7719b 90 point2=counter;
kim1212 0:4cc88ba7719b 91 }
kim1212 0:4cc88ba7719b 92 }
kim1212 0:4cc88ba7719b 93
kim1212 0:4cc88ba7719b 94 //緯度計算
kim1212 0:4cc88ba7719b 95 for(counter=1;counter<point1-2;counter++){
kim1212 0:4cc88ba7719b 96
kim1212 0:4cc88ba7719b 97 float num=1;
kim1212 0:4cc88ba7719b 98 for(int i=point1-counter-3;i>0;i--){
kim1212 0:4cc88ba7719b 99 num=num*10;
kim1212 0:4cc88ba7719b 100 }
kim1212 0:4cc88ba7719b 101
kim1212 0:4cc88ba7719b 102 latitude+=(float)num*(buf[counter]-48);
kim1212 0:4cc88ba7719b 103 }
kim1212 0:4cc88ba7719b 104
kim1212 0:4cc88ba7719b 105 float minute=0;
kim1212 0:4cc88ba7719b 106
kim1212 0:4cc88ba7719b 107 minute+=(buf[point1-2]-48)*10;
kim1212 0:4cc88ba7719b 108 minute+=(buf[point1-1]-48);
kim1212 0:4cc88ba7719b 109
kim1212 0:4cc88ba7719b 110 for(counter=point1+1;counter<point1+5;counter++){
kim1212 0:4cc88ba7719b 111 float num=1;
kim1212 0:4cc88ba7719b 112
kim1212 0:4cc88ba7719b 113 for(int i=counter-point1;i>0;i--){
kim1212 1:68601d2af8a5 114 num=num*0.1f;
kim1212 0:4cc88ba7719b 115 }
kim1212 0:4cc88ba7719b 116
kim1212 0:4cc88ba7719b 117 minute+=(float)num*(buf[counter]-48);
kim1212 0:4cc88ba7719b 118 }
kim1212 0:4cc88ba7719b 119
kim1212 0:4cc88ba7719b 120 latitude+=minute/60;
kim1212 0:4cc88ba7719b 121
kim1212 0:4cc88ba7719b 122
kim1212 0:4cc88ba7719b 123 //経度計算
kim1212 0:4cc88ba7719b 124 for(counter=point1+8;counter<point2-2;counter++){
kim1212 0:4cc88ba7719b 125
kim1212 0:4cc88ba7719b 126 float num=1;
kim1212 0:4cc88ba7719b 127 for(int i=point2-counter-3;i>0;i--){
kim1212 0:4cc88ba7719b 128 num=num*10;
kim1212 0:4cc88ba7719b 129 }
kim1212 0:4cc88ba7719b 130
kim1212 0:4cc88ba7719b 131 longtitude+=(float)num*(buf[counter]-48);
kim1212 0:4cc88ba7719b 132 }
kim1212 0:4cc88ba7719b 133
kim1212 0:4cc88ba7719b 134 minute=0;
kim1212 0:4cc88ba7719b 135
kim1212 0:4cc88ba7719b 136 minute+=(buf[point2-2]-48)*10;
kim1212 0:4cc88ba7719b 137 minute+=(buf[point2-1]-48);
kim1212 0:4cc88ba7719b 138
kim1212 0:4cc88ba7719b 139 for(counter=point2+1;counter<point2+5;counter++){
kim1212 0:4cc88ba7719b 140 float num=1;
kim1212 0:4cc88ba7719b 141
kim1212 0:4cc88ba7719b 142 for(int i=counter-point2;i>0;i--){
kim1212 1:68601d2af8a5 143 num=num*0.1f;
kim1212 0:4cc88ba7719b 144 }
kim1212 0:4cc88ba7719b 145
kim1212 0:4cc88ba7719b 146 minute+=(float)num*(buf[counter]-48);
kim1212 0:4cc88ba7719b 147 }
kim1212 0:4cc88ba7719b 148
kim1212 0:4cc88ba7719b 149 longtitude+=minute/60;
kim1212 0:4cc88ba7719b 150
kim1212 0:4cc88ba7719b 151
kim1212 0:4cc88ba7719b 152 result=true;
kim1212 0:4cc88ba7719b 153 }
kim1212 0:4cc88ba7719b 154
kim1212 0:4cc88ba7719b 155 else{
kim1212 0:4cc88ba7719b 156 result=false;
kim1212 0:4cc88ba7719b 157 }
kim1212 0:4cc88ba7719b 158
kim1212 0:4cc88ba7719b 159
kim1212 0:4cc88ba7719b 160
kim1212 0:4cc88ba7719b 161
kim1212 0:4cc88ba7719b 162
kim1212 0:4cc88ba7719b 163 }
kim1212 0:4cc88ba7719b 164 }