Go Down

Topic: Convertir coord. GPGLL en longitude et latitude. (Read 692 times) previous topic - next topic

Anthil

Bonjour,
Pour un projet de terminale, j'utilise un GPS (modèle : VK2828U7G5LF) mais les données en sortie sur le moniteur sont en GPGLL de la forme (abcde.fghi). Pour les convertir en coordonnées classiques, j'ai trouvé une formule de calcul : abc+(de/60)+(fghi/600000).
J'aimerai savoir comment attribuer une variable différente à chaque caractère pour appliquer la formule.
Merci beaucoup de votre aide.

fdufnews

C'est pas une variable différente par caractère qu'il te faut c'est une variable qui contienne la valeur numérique représentée par chaque groupe de caractère.

Il faudrait déjà savoir comment tu récupères lesdites informations pour savoir comment les traiter.
Poste déjà ton code qui récupère les données après on verra.

dbrion06

Si vous êtes paresseux, vous pouvez demander à google "GPS arduino github"...

lesept

GPGLL est au format DDMM.MMMM
Exemple : 0123.4567 correspond à 1° 23.4567 minutes.
Pour convertir en degrés décimaux, il faut faire DD + (MM.MMMM)/60.

Donc tu dois prendre ta donnée et extraire la partie des centaines (DD) et le reste (MM.MMMM), puis calculer. Tu dis recevoir "les données en sortie sur le moniteur" mais sous quel format ? Ou, autrement dit, qui t'envoie ces données ?

Si tu les reçois sur une liaison série et que le moniteur est juste là pour les afficher, tu vas les chercher sur ta liaison série et les traiter en fonction du format. Si c'est un float, tu n'as qu'à faire le calcul. Si c'est une chaîne de caractères, il faut extraire les valeurs une par une pour reconstruire les degrés et les minutes décimales avant de faire ton calcul.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Anthil

#4
Apr 21, 2019, 06:05 am Last Edit: Apr 21, 2019, 06:10 am by Anthil
Le problème c'est que je suis nouveau sur arduino et la programmation et je ne sais pas comment le programmer et c'est un float et comment faire le calcul pour qu'il soit affiché sur le moniteur. Merci pour la reponse.

68tjs

Quote
Le problème c'est que je suis nouveau sur arduino et la programmation et je ne sais pas comment le programmer
Et bien tu fais comme tout le monde : tu lis des tutos et pour commencer celui d'Eskimon dont nous donnons le lien dans le message "Règles du forum francophone" que bien évidement tu as lu avant de poster.
Tu propose du code que bien évidement tu aura tenter de compiler.
S'il ne fonctionne pas ou qu'il refuse de compiler tu donne le max d'explications et il se trouvera quelqu'un pour t'aider mais ici la devise est : fais d'abord quelque chose avant de demander la solution.

PS: si c'est pour le bac bouge toi les miches et montre un peu plus de travail personnel sinon ton message rejoindra  le Bac-Ka-Poux-Bêle 2019 dans le BAR.
Les Shadocks : L'ignorance ne s'apprend pas.

fdufnews

c'est un float et comment faire le calcul pour qu'il soit affiché sur le moniteur.
Tu es certain que c'est float qui est transmis? Ce ne serait pas plutôt une chaîne de caractères représentant un float?

Le problème c'est que je suis nouveau sur arduino et la programmation et je ne sais pas comment le programmer
Ouai, en fait tu n'as pas l'air trop sous pression si on considère qu'il s'est passé 2 semaines entre ce post et le précédent.

Anthil

#7
Apr 21, 2019, 09:53 am Last Edit: Apr 21, 2019, 09:58 am by Anthil
le code que j'utilise c'est cela et j'avais complétement oublié que j'avais posté un message sur le site. Je cherche plus dans des site anglais que français c'est pour cela que je ne suis pas venu sur le site. ET surtout c'est la première fois que je viens dans les forum je ne sais pas comment ça  se passe ici.

Anthil

celle que j'ai passé avant était celui que j'ai modifié celle de base est cela.

al1fch

#9
Apr 21, 2019, 10:46 am Last Edit: Apr 21, 2019, 10:47 am by al1fch
Bonjour

Quote
ET surtout c'est la première fois que je viens dans les forum je ne sais pas comment ça  se passe ici.
tu sauras quand tu auras pris connaissance du mode d'emploi !! 

(une bonne habitude à prendre en arrivant quelquepart.....)


lesept

Et un code en pièce jointe, ce n'est pas facile à lire sur un smartphone.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Anthil

#11
Apr 21, 2019, 10:57 am Last Edit: Apr 21, 2019, 11:01 am by Anthil
Voici le code que j'utilise  :)


String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
String signal = "$GPGLL";
void setup() {
   // initialize serial:
   Serial.begin(9600);
   // reserve 200 bytes for the inputString:
   inputString.reserve(200);
}

void loop() {
   // print the string when a newline arrives:
   if (stringComplete) {
       String BB = inputString.substring(0, 6);
       if (BB == signal) {
           String LAT = inputString.substring(7, 17);
           int LATperiod = LAT.indexOf('.');
           int LATzero = LAT.indexOf('0');
           if (LATzero == 0) {
               LAT = LAT.substring(1);
           }

           String LON = inputString.substring(20, 31);
           int LONperiod = LON.indexOf('.');
           int LONTzero = LON.indexOf('0');
           if (LONTzero == 0) {
               LON = LON.substring(1);
           }

           Serial.println(LAT);
           Serial.println(LON);

       }

       // Serial.println(inputString);
       // clear the string:
       inputString = "";
       stringComplete = false;
   }
}



al1fch

#12
Apr 21, 2019, 11:21 am Last Edit: Apr 21, 2019, 11:23 am by al1fch
Anthil ... si tu te décides enfin à lire le mode d''emploi du forum tu verras comment posters le code... pour éviter que ton message finisse à la poubelle.....

icare

Bonjour,
Il insiste à faire à sa manière.
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

Anthil

Voila je pense je suis dans les règle maintenan

Code: [Select]

String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
String signal = "$GPGLL";
void setup() {
   // initialize serial:
   Serial.begin(9600);
   // reserve 200 bytes for the inputString:
   inputString.reserve(200);
}

void loop() {
   // print the string when a newline arrives:
   if (stringComplete) {
       String BB = inputString.substring(0, 6);
       if (BB == signal) {
           String LAT = inputString.substring(7, 17);
           int LATperiod = LAT.indexOf('.');
           int LATzero = LAT.indexOf('0');
           if (LATzero == 0) {
               LAT = LAT.substring(1);
           }

           String LON = inputString.substring(20, 31);
           int LONperiod = LON.indexOf('.');
           int LONTzero = LON.indexOf('0');
           if (LONTzero == 0) {
               LON = LON.substring(1);
           }

           Serial.println(LAT);
           Serial.println(LON);

       }

       // Serial.println(inputString);
       // clear the string:
       inputString = "";
       stringComplete = false;
   }
}

Go Up