Bonjour à tous,
Je viens de me lancer dans un montage qui me permettrait d'enregistrer des données gps (coordonnées, heure, altitude et vitesse) sur une carte SD.
J'ai donc acheté un lecteur de carte SD (avec 8 broches) et un recepteur gps (à 4 broches). Ayant quelques connaissance en programmation (et avec l'aide de programme trouvé sur internet), j'ai écrit mon programme me permettant d’enregistrer les infos sur la carte SD.
Pour le Gps,j'ai branché le TX sur pin 7 et RX sur 8. Pour le lecteur de cartes SD: CS sur 4, MOSI sur 11, SCK sur 13 et MISO sur 12. Et j'ai rajouté quelques LED me permettant de vérifier le bon fonctionnement. Voici mon code:
#include <SPI.h>
#include <SD.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>
TinyGPS gps;
SoftwareSerial serialgps(7,6);
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long chars;
unsigned short sentences, failed_checksum;
const int vert = 9;
const int red = 8;
const int blue = 2;
File myFile;
void setup()
{
serialgps.begin(9600);
while (!SD.begin(4)) {
return;
}
pinMode(vert,OUTPUT);
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
myFile = SD.open("gps.txt", FILE_WRITE);
if (myFile)
{
myFile.println("Start");
}
myFile.close();
}
void loop()
{
digitalWrite(red, LOW);
digitalWrite(vert, LOW);
digitalWrite(blue, HIGH);
delay(500);
digitalWrite(blue, LOW);
if (serialgps.available())
{
myFile = SD.open("gps.txt", FILE_WRITE);
if (myFile)
{
digitalWrite(vert, HIGH);
int c = serialgps.read();
if(gps.encode(c))
{
float latitude, longitude;
gps.f_get_position(&latitude, &longitude);
myFile.print("Lat/Long: ");
myFile.print(latitude,5);
myFile.print("/");
myFile.print(longitude,5);
gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths);
myFile.print(" - Date: "); myFile.print(day, DEC); myFile.print("/");
myFile.print(month, DEC); myFile.print("/"); myFile.print(year);
myFile.print(" - "); myFile.print(hour, DEC); myFile.print(":");
myFile.print(minute, DEC); myFile.print(":"); myFile.print(second, DEC);
myFile.print("."); myFile.print(hundredths, DEC);
myFile.print(" - Altitude: "); myFile.print(gps.f_altitude());
myFile.print(" - Speed: "); myFile.print(gps.f_speed_kmph());
myFile.println();
gps.stats(&chars, &sentences, &failed_checksum);
}
myFile.close();
}
}
delay(500);
}
Malheureusement, ça ne marche pas toujours du premier coup (aha :)), sur ma carte SD j'ai bien le document texte et à l'intérieur, j'ai parfois une ligne avec un seul ensemble de données (1 seule coordonnée et altitude GPS) et parfois rien. Moi je souhaiterais avoir les données qui s'enregistrent sur la carte environ toute les 1-2 secondes (et du coup une nouvelle ligne à chaque 1-2 secondes). J'ai testé mon GPS seul, il marche très bien. Cela fait plusieurs jour que je me casse la tête sur ça, quelqu’un aurait-il une idée d'où vient mon problème?
PS: j'ai également testé mon lecteur de carte SD avec les exemples de la bibliothèque, et il marche un peu bizarrement car il fonctionne normalement sans avoir à brancher la masse (Gnd) à la carte arduino et dès que je branche la masse il ne fonctionne plus. Bizarre, qu'en pensez-vous?
Merci d'avance de votre aide et de vos réponse,
Clément