Arduino Mega GPS med LCD och SD loggning (6 / 9 steg)
Steg 6: Läsa gps
Setup bibliotek i rubriken skript:
#include Adafruit_GPS.h
#include SoftwareSerial.h
HardwareSerial mySerial = Serial1;
Adafruit_GPS GPS (& mySerial);
Välj gps i Autostart:
pinMode(chipSelect,OUTPUT);
digitalWrite(chipSelect,LOW);
GPS.begin(9600);
Ange en uppdateringsgrad / / 1Hz fungerar bra och lämnar tid för att utföra loggning GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); Alternativt 0,1 Hz, 5 Hz och 10 Hz uppdateringsfrekvens
RMC (rekommenderas minst): GGA (fix data) inklusive höjd GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
Inaktivera uppdateringar på antenn status, om den fasta programvaran tillåter det
GPS.sendCommand(PGCMD_NOANTENNA);
.
Läsa GPS med avbrott för ekande till seriell bildskärmen.
Observera att data faktiskt tolkas i Adafruit_GPS.h bibliotek koden, inte i detta avbrott rutin.
1ms avbryta på timer0 att underlätta gps data eko-
om GPSECHO = true useInterrupt(true); Läs input av Avbryt om sant
.
Det är det! Loop och läs:
GPS.newNMEAreceived() är inställt på true om nya gps-information har kommit.
GPS.parse(stringptr) är inställt på true om värden har varit framgångsrikt separerade (analyserad) från rå GPS textsträngar.
GPS.fix ställs in till sant om GPS rapporter med en fix på den position.
Om gps har en fix extrahera värden för position, höjd, hastighet, bäring, tid, geoidheight, satelliter och hdop.
Ståndpunkten returneras i decimal longitud och latitud, hastighet i knop, avståndet i meter.
.
om (GPS.newNMEAreceived()) {
char * stringptr = GPS.lastNMEA();
.
IF (!. GPS.parse(stringptr)) avkastning. gå om falska
.
IF(GPS.Fix) {
digitalWrite (ledGreen, hög);
fast = sant; kom ihåg stat om den ändras mitten av processen
mymillis = GPS.milliseconds;
myseconds = GPS.seconds;
mytime = String(GPS.hour) + ":"+ String(GPS.minute) +":";
LOGTIME = mytime;
LOGTIME += sträng (int (myseconds + mymillis/1000 + 0,1)); runda upp om inom 0,1 S
mytime += sträng (myseconds + mymillis/1000); återkallade heltid
myyear = String(GPS.day) + "/" + String(GPS.month) + "/";
lcdyear = myyear; theyear = String(GPS.year);
myyear += theyear;
mylen = theyear.length();
lcdyear += theyear.substring(mylen-1,mylen); sista siffran bara att passa in i
Latitude = GPS.latitudeDegrees;
längd = GPS.longitudeDegrees;
altitudem = GPS.altitude;
altitudef = altitudem * fconvert;
speedknots = GPS.speed;
speedmph = speedknots * 1.15077945;
speedkph = speedknots * 1.85200;
rubrik = GPS.angle;
satelliter = GPS.satellites;
geoiden = GPS.geoidheight;
HDOP = 7-int(GPS. HDOP + 0,5);