GSM närhet Alert med GPS läge och tid (2 / 5 steg)
Steg 2: Skicka sms (med GPS koordinater)
Skicka ett SMS
Innan du försöker skicka SMS, se till att GPRS antennen är ansluten.
Den LinkIt en "LGSM.h" modul är det löjligt enkelt att skicka ett SMS, jag var verkligen som bortblåst. Numret lagras som en sträng med tecken, som är SMS, då det skickas, det är det!
LSMS.beginSMS("0825551234");
LSMS.print(smsBuffer);
LSMS.endSMS();
Formatering GPS
Innan vi kan göra något med Linkit en GPS, måste vi koppla antennen till porten som är märkt "GPS" på baksidan av styrelsen.
GPS rapporterade i form av kommaavgränsad strängar, varav det finns en hel del av olika typer, alla med inriktning på en annan uppsättning data. Allt som var jag intresserad för detta projekt var tid och plats, så jag använde "rekommenderade minsta data för gps" eller "RMC" sträng som ser ut något såhär:
$GPRMC, 123519, A, 4807.038, N, 01131.000, E, 022.4, 084.4, 230394, 003.1, W * 6A
Denna sida har en bra beskrivning av alla strängtyper av, här är ett utdrag av RMC strängen, du kan se att tiden är det första rapporterade objektet och latitud och longitud är 3: e och 5: e. Riktning, Nord och syd och öst/väst är
RMC rekommenderas minst meningen C
123519 fix vid 12:35:19 UTC
En Status A = aktiv eller V = tomrum.
4807.038, N latitud 48 deg 07.038' N
01131.000, E longitud 11 deg 31.000' E
022.4 fart över grund i knop
084.4 spåra vinkeln i grader True
230394 datum - 23 mars 1994
003.1, W magnetisk Variation
* 6A checksum data, börjar alltid med *
Tyvärr latitud och longitud rapporteras alltid i ett konstigt format där de första två siffrorna (för lat) eller tre första siffror (för lon) är graderna, då resten är decimal minuter innebär detta att strängarna måste delas upp och konverteras om vi vill använda decimalgrader.
Jag hittade dessa två sidor mycket hjälpsam i konvertera koordinater till decimal, de är både läsvärd.
Detta är kodsträng som hanterar nämnda samordnar omvandlingen, de infogade kommentarerna förklara det mer ingående.
void convertCoords (dubbel latitud, longitud, char n_or_s, char e_or_w, dubbel & lat_return, dubbel & lon_return) {
/*
Latitude 5213.2930, N -> 52d 13.2930' N
52 grader 13.2930 minuter norr
52 + (13.2930 / 60) = 52.22155
Eftersom det är norr om ekvatorn, förblir nummer positiv.
+52.22155
*/
int lat_deg_int = int(latitude / 100); Extrahera de första 2 tecken för att få de latitud graderna
Double latitude_float = latitud - (lat_deg_int * 100); ta bort det grader med koordinater - så återstår bara minuter-sekunder en del av koordinaterna
lat_return = lat_deg_int + latitude_float / 60; Lägg tillbaka på grader del, så det är decimalgrader
Kontrollera om det är N eller S, S blir värdet negativt
om (n_or_s == s ') {
lat_return * = -1;
}
/*
Longitud 00004.5337, W -> 00 d 04.5337' W
00 grader 4.5337 minuter västerut
00 + (4.5337 / 60) = 0.0755616
Eftersom det är väst, blir numrera negativ.
-0.0755616
*/
int lon_deg_int = int(longitude / 100);
Double longitude_float = longitud - lon_deg_int * 100;
lon_return = lon_deg_int + longitude_float / 60;
om (e_or_w == "W") {
lon_return * = -1;
}
}