]> git.piffa.net Git - arduino/blob - books/ArduinoNextSteps-master/ArduinoNextSteps/sketch_10_04_GPS/sketch_10_04_GPS.ino
corsi
[arduino] / books / ArduinoNextSteps-master / ArduinoNextSteps / sketch_10_04_GPS / sketch_10_04_GPS.ino
1 #include <SoftwareSerial.h>
2
3 SoftwareSerial gpsSerial(10, 11); // RX, TX (TX not used)
4 const int sentenceSize = 80;
5
6 char sentence[sentenceSize];
7
8 void setup()
9 {
10   Serial.begin(9600);
11   gpsSerial.begin(9600);
12 }
13
14 void loop()
15 {
16   static int i = 0;
17   if (gpsSerial.available())
18   {
19     char ch = gpsSerial.read();
20     if (ch != '\n' && i < sentenceSize)
21     {
22       sentence[i] = ch;
23       i++;
24     }
25     else
26     {
27      sentence[i] = '\0';
28      i = 0;
29      Serial.println(sentence);
30      //displayGPS();
31     }
32   }
33 }
34
35 void displayGPS()
36 {
37   char field[20];
38   getField(field, 0);
39   if (strcmp(field, "$GPRMC") == 0)
40   {
41     Serial.print("Lat: ");
42     getField(field, 3);  // number
43     Serial.print(field);
44     getField(field, 4); // N/S
45     Serial.print(field);
46     
47     Serial.print(" Long: ");
48     getField(field, 5);  // number
49     Serial.print(field);
50     getField(field, 6);  // E/W
51     Serial.println(field);
52   }
53 }
54
55 void getField(char* buffer, int index)
56 {
57   int sentencePos = 0;
58   int fieldPos = 0;
59   int commaCount = 0;
60   while (sentencePos < sentenceSize)
61   {
62     if (sentence[sentencePos] == ',')
63     {
64       commaCount ++;
65       sentencePos ++;
66     }
67     if (commaCount == index)
68     {
69       buffer[fieldPos] = sentence[sentencePos];
70       fieldPos ++;
71     }
72     sentencePos ++;
73   }
74   buffer[fieldPos] = '\0';
75 }