Bien le bonjour à tous !
Bon alors voilà, ayant vu mainte discussion au sein de ce forum, toutes plus intéressantes les une que les autres, je me suis lancé et ais créé un compte, car moi aussi j'ai besoin de réponses spécifiques ^^'
Je suis en classe de terminale STI2D, et j'ai donc un projet de fin d'année à réaliser (étant en spécificité SIN ma partie concerne la programmation d'un objet). Notre sujet est un Imoca et ma partie concerne la programmation d'une carte Arduino permettant la réception, le stockage, le décryptage et l'affichage dans le moniteur série des trames GPS grâce à un module GPS de la marque seeed (réf : ).
Pour l'instant, mon programme est le suivant :
// link between the computer and the SoftSerial Shield
// at 9600 bps 8-N-1
// computer is connected to Hardware UART
// SoftSerial Shield is connected to the Software UART:D2&D3
#include <SoftwareSerial.h>
SoftwareSerial SoftSerial(2, 3);
String message = "";
unsigned char buffer[64]; // buffer array for data receveive over serial port
int count = 0; // counter for buffer array
void setup() {
SoftSerial.begin(9600); // the SoftSerial baud rate
Serial.begin(9600); // the Serial port of Arduino baud rate
}
void loop() {
if (SoftSerial.available()) // if date is coming from software serial port ==> data is coming from SoftSerial shield
{
while (SoftSerial.available()) // reading data into char array
{
buffer[count++] = SoftSerial.read(); // writing data into array
if (message.substring == "$GPRMC")
{
Serial.println ("la trame est une trame de type RMC");
}
if (count == 64)break;
}
Serial.write(buffer, count); // if no data transmission ends, write buffer to hardware serial port
clearBufferArray(); // call clearBufferArray function to clear the stored data from the array
count = 0; // set counter of while loop to zero
}
if (Serial.available()) // if data is available on hardware serial port ==> data is coming from PC or notebook
SoftSerial.write(Serial.read()); // write it to the SoftSerial shield
}
void clearBufferArray() // function to clear buffer array
{
for (int i = 0; i < count; i++)
{
buffer[i] = NULL; // clear all index of array with command NULL
}
}
J'arrive bien à recevoir les trames GPS et les afficher dans le moniteur série (voir image ci-dessous)
Le problème est que puisqu'on a à faire à un bateau, la trame qui m'intéresse n'est que la "$GPRMC", mais comment faire pour "effacer" les autres ? Et pourriez-vous m'aider à créer un bout de programme permettant de décoder la trame RMC ? Je sais à quoi correspondent les valeurs sur la trame, mais j'aimerai afficher dans le moniteur série cette trame de la manière suivante :
Latitude : valeur de la trame,
Cap1 : valeur de la trame,
Longitude : valeur de la trame,
Cap2 : valeur de la trame,
Heure : valeur de la trame,
ETC...
J'espère obtenir de l'aide et arriver à remplir ma mission ^^