par Hubert GHESTEM
Ce module est installé sur une platine Grove elle-même connectée à une carte Arduino Uno.
Les coordonnées GPS sont affichées sur les deux lignes du module LCD
installé également sur la platine Grove.
Voici mon programme. J'ai trouvé sur Internet un programme similaire
qui détecte le "$" en début de trame: il ne marche pas chez moi.
Un autre programme, vu aussi sur Internet, est très compliqué.
//H. Ghestem - 16/03/2023
//Lecture coordonnées GPS sur platine Grove
//Trame à rechercher: "$GPGGA,161019.000,5043.2094,N,00309.8056,E,6,3,6.28,100.8,M,47.2,M,,*";
//puis affichage des coordonnées seules sur LCD
#include <SoftwareSerial.h>
SoftwareSerial SoftSerial(2, 3); //Module GPS relié à D2
#include <Wire.h>
#include "rgb_lcd.h"
rgb_lcd lcd;
char buffer[64]; //à la place de: unsigned char buffer[64]; indiqué sur l'exemple
//sinon mauvais affichage sur LCD
char currentchar;
int count, i, j;
void setup()
{
SoftSerial.begin(9600);
Serial.begin(9600);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print(" GPS");
delay(1000);
}
void loop()
{
clearBufferArray();
count = 0;
i = 0;
if (SoftSerial.available())
{
currentchar = SoftSerial.read();
if(currentchar == 'G')
{
while (i < 2)
{
if (SoftSerial.available())
{
buffer[count++] = SoftSerial.read();
i++;
}
}
if (strcmp (buffer,"A,") == 0)
{
while (i < 40) //40 suffit pour avoir les coordonnées
{
if (SoftSerial.available())
{
buffer[count++] = SoftSerial.read();
i++;
}
}
Serial.write(buffer,count); //Sortie sur fenêtre tty
Serial.println(" ");
for(j = 13; j < 24; j++) //Affichage GPS N
{
lcd.setCursor(j-13, 0); //colonne 0, ligne 0
lcd.print(buffer[j]);
}
for(j = 26; j < 37; j++) //Affichage GPS E
{
lcd.setCursor(j-26, 1); //colonne 0, ligne 1
lcd.print(buffer[j]);
}
}
}
}
}
void clearBufferArray() // function to clear buffer array
{
for (i=0; i<64; i++)
{
buffer[i] = NULL;
} // clear all index of array with command NULL
}