Stap 2: Het verzenden van sms (met GPS-coördinaten)
Versturen van een SMS
Voordat u probeert een SMS versturen, zorg ervoor dat de GPRS-antenne is aangesloten.
De LinkIt One "LGSM.h" module maakt het belachelijk makkelijk om een SMS te sturen, ik was echt weggeblazen. Het nummer wordt opgeslagen als een reeks tekens, zoals het SMS-bericht, dan wordt verzonden, dat is het!
LSMS.beginSMS("0825551234"); LSMS.print(smsBuffer); LSMS.endSMS();
Opmaak van de GPS
Voordat we iets met de Linkit One's GPS doen kunt, moeten we sluit de antenne aan op de poort gemarkeerd "GPS" op de achterkant van het bord.
GPS gemeld in de vorm van CSV snaren, waarvan er een heleboel verschillende soorten, elk met een focus op een andere set gegevens zijn. Alles wat was ik geïnteresseerd in voor dit project tijd was en locatie, zodat ik gebruikte de "aanbevolen minimale gegevens voor gps" of "RMC" string die ziet er iets als dit:
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
Deze pagina heeft een intrigerende beschrijving van alle soorten van de tekenreeks, hier is een uittreksel van de RMC-tekenreeks, ziet u dat de tijd het eerste item van de gerapporteerde is en de lengte- en breedtegraad 3e en 5e zijn. De richting, de Noord/Zuid en de Oost/west
RMC Recommended Minimum sentence C 123519 Fix taken at 12:35:19 UTC A Status A=active or V=Void. 4807.038,N Latitude 48 deg 07.038' N 01131.000,E Longitude 11 deg 31.000' E 022.4 Speed over the ground in knots 084.4 Track angle in degrees True 230394 Date - 23rd of March 1994 003.1,W Magnetic Variation *6A The checksum data, always begins with *
Helaas de lengte- en breedtegraad worden altijd gemeld in een raar formaat waar de eerste twee cijfers (voor lat) of de eerste drie cijfers (voor lon) de graden zijn en de rest zijn decimale minuten, dit betekent dat de snaren moeten worden gesplitst en geconverteerd als we willen gebruiken decimale graden.
Ik vond deze twee pagina's zeer behulpzaam bij het converteren van coördinaten naar een decimaal getal, ze zijn allebei gelezen waard.
Dit is het stukje code die de bovengenoemde coördinaat omzetting afhandelt, de inline-opmerkingen het in meer detail uitleggen.
void convertCoords(double latitude, double longitude, char n_or_s, char e_or_w, double &lat_return, double &lon_return){ /* Latitude 5213.2930,N --> 52d 13.2930' N 52 degrees 13.2930 minutes NORTH 52 + (13.2930 / 60) = 52.22155 Because it is north of the equator, the number remains positive. +52.22155 */ int lat_deg_int = int(latitude / 100); //extract the first 2 chars to get the latitudinal degrees double latitude_float = latitude - (lat_deg_int * 100); //remove the degrees part of the coordinates - so we are left with only minutes-seconds part of the coordinates lat_return = lat_deg_int + latitude_float / 60; //add back on the degrees part, so it is decimal degrees //Check if it is N or S, S will turn the value negative if (n_or_s == 'S'){ lat_return *= -1; } /* Longitude 00004.5337,W --> 00d 04.5337' W 00 degrees 4.5337 minutes WEST 00 + (4.5337 / 60) = 0.0755616 Because it is West, the number becomes negative. -0.0755616 */ int lon_deg_int = int(longitude / 100); double longitude_float = longitude - lon_deg_int * 100; lon_return = lon_deg_int + longitude_float / 60; if (e_or_w == 'W'){ lon_return *= -1; } }