Linkit en GPS (skicka SMS av GPS-position till mobil) (2 / 3 steg)
Steg 2: kod
#includegpsSentenceInfoStruct info;
röding buff [256];
statiska unsigned char getComma (unsigned char num, const char * str)
{
unsigned char i, j = 0;
int len=strlen(str);
för (jag = 0; jag < len; jag ++)
{
om (str [i] == ",")
j ++;
IF(j == NUM)
tillbaka i + 1.
}
Return 0;
}
statiska dubbel getDoubleNumber (const char * s)
{
char buf [10].
unsigned char i.
dubbla rev;
Jag = getComma 1, s;
jag = i - 1.
strncpy (buf, s, i);
BUF [i] = 0;
rev=ATOF(BUF);
returnera rev;
}
statiska dubbel getIntNumber (const char * s)
{
char buf [10].
unsigned char i.
dubbla rev;
Jag = getComma 1, s;
jag = i - 1.
strncpy (buf, s, i);
BUF [i] = 0;
rev=atoi(BUF);
returnera rev;
}
void parseGPGGA (const char * GPGGAstr)
{
/ * Hänvisa till http://www.gpsinformation.org/dale/nmea.htm#GGA
* Exempeldata: $GPGGA, 123519, 4807.038, N, 01131.000, E, 1, 08, 0,9, 545.4, M, 46,9, M,, * 47
* Där:
* GGA Global Positioning System Fix Data
* 123519 fix vid 12:35:19 UTC
* 4807.038, N latitud 48 deg 07.038' N
* 01131.000, E longitud 11 deg 31.000' E
* 1 fix kvalitet: 0 = ogiltig
* 1 = GPS-fix (SPS)
* 2 = DGPS fix
* 3 = PPS fix
* 4 = Real Time Kinematic
* 5 = float RTK
* 6 = beräknade (död räkenskap) (2.3 funktion)
* 7 = manuell ingångsläge
* 8 = simuleringsläge
* 08 antal satelliter som spåras
* 0.9 horisontella utspädning av position
* 545.4, M höjd, meter över havsytan
* 46,9, M höjd GeoID (havsnivån) ovanför WGS84
* ellipsoid
* (tomma fält) tid i sekunder efter sista DGPS-uppdateringen
* (tomma fält) DGPS station ID-nummer
* * 47 checksum data, börjar alltid med *
*/
dubbel bredd.
dubbel longitud;
int tmp, timme, minut, sekund, num;
om (GPGGAstr [0] == '$')
{
tmp = getComma (1, GPGGAstr);
timme = (GPGGAstr [tmp + 0] - '0') * 10 + (GPGGAstr [tmp + 1] - '0');
minut = (GPGGAstr [tmp + 2] - '0') * 10 + (GPGGAstr [tmp + 3] - '0');
för det andra = (GPGGAstr [tmp + 4] - '0') * 10 + (GPGGAstr [tmp + 5] - '0');
sprintf (buff, "UTC timer 2d-% 2d-% 2d", timme, minut, sekund);
Serial.println(buff);
tmp = getComma (2, GPGGAstr).
Latitude = getDoubleNumber (& GPGGAstr[tmp]);
tmp = getComma (4, GPGGAstr).
longitud = getDoubleNumber (& GPGGAstr[tmp]);
sprintf (buff, "latitud = % 10 .4f, longitud = %10.4f", latitud, longitud);
Serial.println(buff);
tmp = getComma (7, GPGGAstr).
NUM = getIntNumber (& GPGGAstr[tmp]);
sprintf (buff, "satelliter nummer = %d", num);
Serial.println(buff);
}
annat
{
Serial.println ("inte få data");
}
}
void setup() {
sätta din installation kod här, om du vill köra en gång:
Serial.BEGIN(115200);
LGPS.powerOn();
Serial.println ("LGPS driver på och väntar...");
Delay(3000);
tag (!. LSMS.ready) {
Delay(1000);
}
}
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
Serial.println ("LGPS loop");
LGPS.getData(&info);
LSMS.beginSMS ("Ange nr.");
LSMS.print ((char*) information. GPGGA);
parseGPGGA ((const char*) information. GPGGA);
Delay(2000);
LSMS.endSMS();
}