Bonjour a tous,
Je suis en train de coupler un GPS UBLOX avec une puce NEO-6M-0-001 et un SHIELD SD sur un UNO.
Mon objectif est d'enregistrer toutes les 5 secondes divers infos venant du GPS et ce dans uen carte SD.
Actuellement ça enregistre dans une format CVS mais a terme je compte le faire dans un format GPX afin de faciliter l'export.
Bon jusque la j'ai réussi a faire fonctionner de manière indépendante les divers éléments.
J'utilise la bibliothèque TinyGPS++
Les exemples me permettent de faire fonctionner le GPS correctement, l'intégralité de mes données sortent nickel sur le terminal.
En ce qui concerne le Shield SD lui fonctionne avec la bibliothèque SD et la SPI et tout fonctionne.
L'ensemble fonction cependant, mes données d'altitude, de satellite et de HDOP restent a zéro sur le terminal et sur la SD.
J'ai pourtant bien vérifier les variables sur TinyGPS++ | Arduiniana
Je vous poste donc mon code :
// Tracker GPS
/* Dépendances */
#include <SPI.h> // Pour la communication SPI
#include <SD.h> // Pour la communication avec la carte SD
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
TinyGPSPlus gps;
SoftwareSerial ss(4, 3);
/** Broche CS de la carte SD */
const byte SDCARD_CS_PIN = 10; // A remplacer suivant votre shield SD
/** Nom du fichier de sortie */
const char* OUTPUT_FILENAME = "data3.csv";
/** Delai entre deux prise de mesures */
const unsigned long DELAY_BETWEEN_MEASURES = 5000;
/** Fichier de sortie avec les mesures */
File file;
void setup() {
/* Initialisation du port série (debug) 0/*/
Serial.begin(115200);
ss.begin(9600);
/* Initialisation du port SPI */
pinMode(10, OUTPUT); // Arduino UNO
/* Initialisation de la carte SD */
Serial.println(F("Initialisation de la carte SD ... "));
if (!SD.begin(SDCARD_CS_PIN)) {
Serial.println(F("Erreur : Impossible d'initialiser la carte SD"));
Serial.println(F("Verifiez la carte SD et appuyez sur le bouton RESET"));
for (;;); // Attend appui sur bouton RESET
}
/* Ouvre le fichier de sortie en écriture */
Serial.println(F("Ouverture du fichier de sortie ... "));
file = SD.open(OUTPUT_FILENAME, FILE_WRITE);
if (!file) {
Serial.println(F("Erreur : Impossible d'ouvrir le fichier de sortie"));
Serial.println(F("Verifiez la carte SD et appuyez sur le bouton RESET"));
for (;;); // Attend appui sur bouton RESET
}
/* Ajoute l'entête CSV si le fichier est vide */
if (file.size() == 0) {
Serial.println(F("Ecriture de l'entete CSV ..."));
file.println(F("LAT; LONG; ALT; JOUR; MOIS; ANNEE; HEURE; MINUTE; SECONDE; SAT; HDOP"));
file.flush();
}
}
void loop()
{
// Temps de la précédente mesure et actuel
static unsigned long previousMillis = 0;
unsigned long currentMillis = millis();
/* Réalise une prise de mesure toutes les DELAY_BETWEEN_MEASURES millisecondes */
if (currentMillis - previousMillis >= DELAY_BETWEEN_MEASURES)
{
previousMillis = currentMillis;
while (ss.available() > 0)
if (gps.encode(ss.read()))
//if (gps.location.isValid())//si la localisation est valide et mise a jour
//{
measure();
//}
}
}
void measure()
{
/* Affiche les données sur le port série pour debug */
Serial.print(gps.location.lat(), 6);
Serial.print(F("; "));
Serial.print(gps.location.lng(), 6);
Serial.print(F("; "));
Serial.print(gps.altitude.meters());
Serial.print(F("; "));
Serial.print(gps.date.day());
Serial.print(F("; "));
Serial.print(gps.date.month());
Serial.print(F("; "));
Serial.print(gps.date.year());
Serial.print(F("; "));
Serial.print(gps.time.hour());
Serial.print(F("; "));
Serial.print(gps.time.minute());
Serial.print(F("; "));
Serial.print(gps.time.second());
Serial.print(F("; "));
Serial.print(gps.satellites.value());
Serial.print(F("; "));
Serial.println(gps.hdop.hdop());
/* Enregistre les données sur la carte SD */
file.print(gps.location.lat(), 6);
file.print(F("; "));
file.print(gps.location.lng(), 6);
file.print(F("; "));
file.print(gps.altitude.meters());
file.print(F("; "));
file.print(gps.date.day());
file.print(F("; "));
file.print(gps.date.month());
file.print(F("; "));
file.print(gps.date.year());
file.print(F("; "));
file.print(gps.time.hour());
file.print(F("; "));
file.print(gps.time.minute());
file.print(F("; "));
file.print(gps.time.second());
file.print(F("; "));
file.print(gps.satellites.value());
file.print(F("; "));
file.println(gps.hdop.hdop());
file.flush();
}
Si vous avez des idées