VG-GPS-spårning, kommunikation, hälsa och Utility enhet (6 / 14 steg)
Steg 6: kod
Koden är:-
#include
#include
gpsSentenceInfoStruct info; röding buff [256]; char url [120]; int fix = 0;
CONST int noofDest = 2; CONST char * nummer [] = {"0123456789", "0123456789"}; ändringsförslagen som kommer att ta emot sms varje gång char incoming_num [21] = "0123456789"; denna no.will endast få sms när vi skickar några sms till detta inga. char meddelande [256];
int ButtonPin = 2;
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) återvända i + 1;} return 0;}
statiska dubbel getDoubleNumber (const char * s) {char buf [10], unsigned char jag dubbla rev; jag = getComma 1, s; jag = i - 1; strncpy (buf, s, i); buf [i] = 0; rev=atof(buf); return rev;}
statiska dubbel getIntNumber (const char * s) {char buf [10], unsigned char jag dubbla rev; jag = getComma 1, s; jag = i - 1; strncpy (buf, s, i); buf [i] = 0; rev=atoi(buf); return rev;}
flyta toWGS84(float nmeaCoord) {float degWhole = float(int(nmeaCoord/100)); flyta degDec = (nmeaCoord - degWhole * 100) / 60; return degWhole + degDec;}
void parseGPGGA (const char * GPGGAstr) {/ * Referens: http://www.gpsinformation.org/dale/nmea.htm#GGA * / dubbel latitude; dubbla longitud; int tmp, timme, minut, sekund, num; om (GPGGAstr [0] == '$') {//latitude tmp = getComma (2, GPGGAstr); latitude = getDoubleNumber (& GPGGAstr[tmp]); tmp = getComma (3, GPGGAstr); / / N eller S flyta latWGS84 = toWGS84(latitude); om ('S ' == GPGGAstr[tmp]) {latWGS84 = - latWGS84; / / förneka om södra halvklotet samordna} //longitude tmp = getComma (4, GPGGAstr); longitud = getDoubleNumber (& GPGGAstr[tmp]); tmp = getComma (5 GPGGAstr); E eller W float lonWGS84 = toWGS84(longitude); om ('W' == GPGGAstr[tmp]) {lonWGS84 = - lonWGS84; / / förneka om västra samordna} sprintf (url, "http://maps.google.com/?q=%f, %f", latWGS84, lonWGS84);
plats fix tmp = getComma (6, GPGGAstr). fixa = getIntNumber (& GPGGAstr[tmp]); {} annat {Serial.println ("nr GPS data");}}
void send_sms (char * nummer, char * meddelande) {LSMS.beginSMS(number); för (int jag = 0; jag < strlen(message); i ++) {LSMS.write(message[i]);} LSMS.endSMS(); }
void setup() {pinMode (ButtonPin, INPUT_PULLUP); Serial.BEGIN(115200); LGPS.powerOn(); Serial.println ("LGPS slår på, väntar på..."); Delay(3000); }
void loop() {LGPS.getData (& information); Serial.Print ((char*) information. GPGGA); parseGPGGA ((const char*) information. GPGGA);
IF(digitalRead(ButtonPin) == låg) {om (fix! = 0) {sprintf (budskap, "snälla hjälp mig!. Nuvarande plats: %s ", url); } annat {sprintf (meddelande, "hjälp mig. Sista plats: %s ", url); } Serial.println(message); för (int jag = 0; jag < noofDest; i ++) {char num [20]; sprintf (num, numbers[i]), send_sms (num, meddelande);} delay(5000); } / / Besvara inkommande SMS genom att returnera positionen if(LSMS.available()) {LSMS.remoteNumber (incoming_num, 20); om (fix! = 0) {sprintf (budskap, "nuvarande plats: %s", url);} annat {sprintf (budskap, "sista plats: %s", url);} Serial.println(Message); send_sms (incoming_num, meddelande); LSMS.flush(); } }
Och det är också fäst längst ned.