Comment puis-je debugger mon code GPS

Voilà, ca ne marche déjà plus,

Mais j'ai une question super importante.
Es-ce que mon module gps DOIT BOUGER pour afficher une position?????
Car là il est sur ma table et est totalement imobile et n'affiche rien (alors qu'il le fesait, il y a une heure...

Quand je le lève avec la main, par moment il affiche une position. Je ne sais pas si c'est le hasard, mais je n'y crois pas trop, car hier, il affichait constament les position. Mais bon, il n'affiche plus tot rien que quelque chose maintenant.

Pourtant je n'ai pas ajouté beaucoup de code. Tout ce que j'ai ajouté est en commentaire

On m'a dit qu'il fallait remplacer PString? Etes-vous d'accord avec?
Es-ce que mon GPS et ma shield sont de mauvaise qualité? Car ca ne peut pas jouer si ca ne marche pas pendant 3-4 heures, etc....?
Je vais de toute manière essayer dans le train, demain, mais ce code n'est pas sorcier! non? Il reste simple.
Que pensez-vous de mon ajout commenté. Ca ne fait que clignoter une led!!

Merci pour vos idées

#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <PString.h>

TinyGPS gps;

#define RXPIN 2
#define TXPIN 3

SoftwareSerial nss(RXPIN, TXPIN);

char buffer[90];

int count = 0;

PString myString(buffer,sizeof(buffer));

//int redLedPin  = 11;
//int greenLedPin = 12;

void setup(){
 
  Serial.begin(4800);
  nss.begin(4800);
  
  //pinMode(redLedPin, OUTPUT);
  //pinMode(greenLedPin, OUTPUT);
  
  Serial.println("*******************");
  Serial.println("Display my position");
  Serial.println("*******************");
  Serial.println("");
}
/*
void blinkLed(int lPin, int nBlink, int msec) {
  if (nBlink) {
    for (int i = 0; i < nBlink; i++) {
      digitalWrite(lPin, HIGH);
      delay(msec);
      digitalWrite(lPin, LOW);
      delay(msec);
    }
  }
}
*/
void loop(){
  while(nss.available()) {
     int c = nss.read();
      Serial.println(c);
      if (gps.encode(c)) {
        float flat, flon, fspeed, falt;
        unsigned long fix_age;
        gps.f_get_position(&flat,&flon,&fix_age);
        
        fspeed = gps.f_speed_kmph();
        falt = gps.f_altitude();

        if(fix_age == TinyGPS::GPS_INVALID_AGE)

          Serial.println(F("No fix detected"));

        else if (fix_age > 5000)

          Serial.println(F("WARNING: Possible Stale Data!"));

        else {
          char index;
          myString.print("AT+SSTRSEND=1,\"");
          //gps_buffer[index++] = 'AT+SSTRSEND=1,"';
          
          myString.print(flat,DEC);
          
          myString.print(",");

          myString.print(flon,DEC);
          
          myString.print(",");
          
          myString.print(fspeed,2);
          
          myString.print(",");
          
          myString.print(falt,2);
          
          myString.print(",");
          
          myString.print(String(count));
          
          myString.print("\"");

          Serial.println(myString);

          myString.begin();

          count++;
          
         //blinkLed(greenLedPin,2,500);
         
         delay(3000);
          
      }
    } 
  }
}

Que me conseillerez-vous?
Changer de GPS? pourtant ca ne semble pas etre un GPS de mauvaise qualité....

J'ai lu dans un tuto, qu'il était bien de mettre 15200 pour le Serial, et j'ai souvent mis 9600 pour le nss.

Si le GPS est configuré pour sortir ses informations à 4800 bauds il faut mettre 4800 dans le code. On ne tire pas la valeur au hasard.

Es-ce que mon GPS et ma shield sont de mauvaise qualité? Car ca ne peut pas jouer si ca ne marche pas pendant 3-4 heures, etc....?

Les satellites bougent la réception n'est pas toujours de même qualité. Le GPS normalement donne des informations sur la quantité de satellites reçus et la qualité de la réception. Même s'il n'est pas capable de délivrer une position il doit te donner ces informations.
Qu'est-ce que le GPS te dit.

Hello,

Les satellites bougent la réception n'est pas toujours de même qualité

Ok, mais bon, ca fait depuis 8h30 qu'il tourne et il ne m'a afficher une position. La led verte n'a pas clignoté une seul fois, ezt dans mon terminal que je ne fois que des chiffres

36
44
36
71
80
46
36
71
80
50
36
71
80
50
36
71
80
52
51
36
44
36
71
80
44
36
71
80
48
36
71
80
44
36
71
80
80
44
65
48

J'ai ca comme GPS
GNSS Receiver - EM-506N5 - GPS-19629 - SparkFun Electronics?
SparkFun GPS Logger Shield - GPS-13750 - SparkFun Electronics.

pierrot10:
Es-ce que mon module gps DOIT BOUGER pour afficher une position?

Non, il marche aussi en fixe.
Il a besoin d'un déplacement uniquement pour calculer une vitesse ou une orientation estimée du Nord à partir de 2 positions successives.

Peut tu afficher le nombre de satellites vus par le GPS ?

et dans mon terminal que je ne fois que des chiffres

Des chiffres c'est aussi des codes ASCII. C'est pas si incohérent que ça

36 $
44 ,
36 $
71 G
80 P
46 .
36 $
71 G
80 P
50 2
36 $
71 G
80 P
50 2
36 $
71 G
80 P
52 4
51 3
36 $
44 ,
36 $
71 G
80 P
44 ,
36 $
71 G
80 P
48 0
36 $
71 G
80 P
44 ,
36 $
71 G
80 P
80 P

bonjour
4800 est le standard de sortie NMEA et il semble bien que ce soit le cas $GP indique le debut d'une sentence NMEA.
pour debugger
fais un simple programme qui ecoute en softserial le GPS en 4800 et qui en cas de reception reemet le caractere reçu vers le serial hard en 115200.
faire ensuite une copie du log serial pour regarder l'aspect des sentences reçues.

ou plus simple si tu a un adaptateur UART TTL-USB --->port com

Je ne connais pas trop la forme des trame NMEA mais je note que les messages ne semblent pas réguliers comme si de temps en temps des caractères étaient perdus.

Pour le test, le plus simple étant toujours le mieux la connexion directe du GPS au PC en passant par un câble FTDI (ou équivalent) me semble le plus fiable.

fdufnews:
Je ne connais pas trop la forme des trame NMEA mais je note que les messages ne semblent pas réguliers comme si de temps en temps des caractères étaient perdus.

Pour le test, le plus simple étant toujours le mieux la connexion directe du GPS au PC en passant par un câble FTDI (ou équivalent) me semble le plus fiable.

bonjour fdufnews
c'est ce que j'ai vu, mais peut etre que le parser "bouffe" la suite , la detection $GP etant peut etre un simple preambule ?
le mieux est bien sur de connecter directement la sortie NMEA TLL au PC par le biais d'un adaptateur type FTDI

He rentre et je vois vous réponse. C'est vraiment un super forum. Merci.

Peut tu afficher le nombre de satellites vus par le GPS ?

Je ne sais pas comment on fait, mais je vais chercher et apporter la réponse. Il me semble avoir vu ca a quelque part.

@Artouste,
j'ai mis ce code. Je ne sais pas si je répond bien a ta proposition:

 if(cell.available() >0)
  {
    incoming_char=cell.read();    //Get the character from the cellular serial port.
    Serial.print(incoming_char);  //Print the incoming character to the terminal.
  }
  //If a character is coming from the terminal to the Arduino...
  if(Serial.available() >0)
  {
    incoming_char=Serial.read();  //Get the character coming from the terminal
    cell.print(incoming_char);    //Send the character to the cellular module.
  }

et j'ai ca en retour, une erreur. Je précise, j'ai du mettre mon switch en UART, si non il n y a rien. Et c'est vrai que j'aurais voulu travailler en DLINE. Mais voici le retour de ma console

R??ª*'$S¡!¡¥¨©QHQT©§©: 60

+CM ERRO: 60

+CM ERRO: 60

+CM ERRO:0C¦¨
E:
ER
ER
MO
I
¦¨
:
RTjUTJJéJJ?SPHhTª
R??ª*'$¦!¡!¡¥¨©QH©©OR: 60

+ME EROR: 6

+ME EROR:
ªL¨Q
E
:
ER
MO6
MªL¨©

  • O?¨©
    =ªCR
  • *SQ
  • O4IéSQ
    +R4MR
    MOHRZjUTJJéJJ?S¨HhiªR??ª
    '$S¡!¡¥¨©QHQT©§©: 60
    +R?0CR6
    E
    ER
    =ªLSQ0
    E*¦¨©
    +j
    +CME ERROR: 60

+CME ERROR: 60

+CME ERROR: 60

+CME ERROR: 60

+CME ERROR: 60

+CME ERROR: 60

+CME ERROR: 60

+CME ERROR: 60

+M ERR 6

+CEERO:60

CM ROR 0

+M ERR 0

+MEERR:6

CEERO:60

J'ai pas encore regarder, ce que l'error 60. mais je le fais de ce pas.

le mieux est bien sur de connecter directement la sortie NMEA TLL au PC par le biais d'un adaptateur type FTDI

Ouf, mais je n'ai pas tout ca. je peux regarder pour en acheter un

Pour avoir le nombre de satellite, j'ai regardé la librairire tinyGPS et j'ai trouvé ceci:

gps.satellites();
J'ai donc ensuite fait dans la boucle loup()

  Serial.print("Nombre de Satellites : ");
  Serial.println(satellite);

à un Serial.begin(115200), j'ai ca:

Nombre de Satellites : ÿ

et j'ai un peu comme l'impression que mon programme frez.

J'ai donc essaye Serial.begin(9600); et la j'ai

char satellite = gps.satellites();
  Serial.print("Nombre de Satellites : ");
  Serial.println(satellite);

me retourne la meme chose

int satellite = gps.satellites();
  Serial.print("Nombre de Satellites : ");
  Serial.println(satellite);

me retourne:

Nombre de Satellites : 255

Ce qui me parrait juste énorme

pierrot10:
me retourne:

Nombre de Satellites : 255

Ce qui me parrait juste énorme

Oui c'est trop, il n'y a que 24 satellites pour le GPS planétaire, mais d'un endroit donné on n'en voit que quelques uns à la fois (typiquement 4 à 8). Ca sent le fil d'antenne cassé ce type de panne intermittente.

testes avec ce code et donne le résultat après

Ok, je te remercie. J'essayerai ce soir, car j'ai pas pris les modules. Mais j'ai craqué, j'ai commandé un nouveau module qui comprend le GPS/GSM/SD (all in one) qui fonctionne avec Aduirno. Ca m'a couté un peu de sous, mais bon, c'est avec le erévérence que j'y arriverai :slight_smile:
Merci

Salut infobarque.

Ben la nouvel librarie SoftwareSerial a une nouvelle fonction satellites() qui les comptes. Bon vu qu'elle me retourne 255.......

J'ai essayé mais SoftwareSerial ne connais pas la fonction satsinview() donc je n'arrive pas a compiler.

J'avais aussi chercher la librairie NewSoftSerial() mais j'ai eu du mal a la trouvé et vu que SoftwareSerial la remplace, je n'ai pas été plus loin.

Ai-je tord?

pierrot10:
Salut infobarque.

Ben la nouvel librarie SoftwareSerial a une nouvelle fonction satellites() qui les comptes. Bon vu qu'elle me retourne 255.......

J'ai essayé mais SoftwareSerial ne connais pas la fonction satsinview() donc je n'arrive pas a compiler.

J'avais aussi chercher la librairie NewSoftSerial() mais j'ai eu du mal a la trouvé et vu que SoftwareSerial la remplace, je n'ai pas été plus loin.

Ai-je tord?

bonsoir
8)

la "nouvelle" ou l'ancienne librarie newsoftserial ne concerne pas du tout le gestion des infos GPS :grin:

je crois que tu melange un peu pas mal de choses entre tes modules GPS/GPRS et qui parle à qui 8)

Heu oui pardon, la j'était tout faux.... :sleeping:

Ignoré mon précédent message.....

En fait le message que j'avais

countSatellite:23: error: 'class TinyGPS' has no member named 'satsinview'

Rien a voir!!!!
Sorry

http://arduino.cc/forum/index.php/topic,37465.0.html

Bonjour,

J'aimerais relancé ce post.
J'ai toujours un problème de fou que je n'arrive pas comprendre. Ca va peut etre vous parraitre fou, mais mon GPS capte des positions généralement apèrs 20h-20h30 (heure suisse).

Aujourd'hui je pouvais avoir des positions jusqu'à 22h, après plus rien. Un autre soir c'était depuis env. 20h30 jusqu' a 0h00.

Je l'ai aussi essayé dans le train (3h de voyage) et par le beau temps. Il n'affiche aucune position, sauf.... entre 20h et 23h00.

Es-ce qu'il y a une raison à ca????

Voici le GPS que j'utilise
GNSS Receiver - EM-506N5 - GPS-19629 - SparkFun Electronics?

Ca me parrait vraiment fou, car il doit pouvoir attrapé des satelittes toutes la jounrée. Il a 20 chanals.

Une idée?

pierrot10:
Bonjour,

J'aimerais relancé ce post.
J'ai toujours un problème de fou que je n'arrive pas comprendre. Ca va peut etre vous parraitre fou, mais mon GPS capte des positions généralement apèrs 20h-20h30 (heure suisse).

Aujourd'hui je pouvais avoir des positions jusqu'à 22h, après plus rien. Un autre soir c'était depuis env. 20h30 jusqu' a 0h00.

Je l'ai aussi essayé dans le train (3h de voyage) et par le beau temps. Il n'affiche aucune position, sauf.... entre 20h et 23h00.

Es-ce qu'il y a une raison à ca????

Voici le GPS que j'utilise
GNSS Receiver - EM-506N5 - GPS-19629 - SparkFun Electronics?

Ca me parrait vraiment fou, car il doit pouvoir attrapé des satelittes toutes la jounrée. Il a 20 chanals.

Une idée?

Bonjour
[JOKE]
Ha , c'est en Suisse ?
La Suisse n'a peut etre payé que pour recevoir un signal gps coherent 2H/jours ? :grin:
[/JOKE]

symptômes étonnants
dans un cas comme ça, je ferais un log des sentences NMEA brutes sans aucun traitement (pas d'utilisation de Tinygps)
l'ideal un simple cable USB/serie en utilisant un soft de log genre terminal.exe.

et apres depouillement des logs

Est ce qu'un autre GPS placé à côté fonctionne normalement ?