bonjour, je recherche une personne susceptible de me retablir un probleme sur un sketch arduino je ne suis pas asser qualifié pour ce boulot car je debute merci de votre aide
Version imprimable
bonjour, je recherche une personne susceptible de me retablir un probleme sur un sketch arduino je ne suis pas asser qualifié pour ce boulot car je debute merci de votre aide
Hello,
Pour faire avancer le schmilblick, décris le problème.
Merci pour votre aide je suis radioamateur et le programme sur arduino nano me transcrit sur écran 4X20 lcd la latitude, la longitude, l'altitude, le locator, la date et l'heure TU le nombres de sat recu.Et le mot long pour longitude ne s’écrit pas correctement et change en permanence .je peux vous envoyer une petite video mais je ne sais pas ou la mettre.
Le montage est constitué d'un nano d'un lcd et d'un module gps ubloc neo6m.
Merci de votre aide
Bonsoir,
Tu peux montrer le programme Arduino en le postant ici ?
voila le prog
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181 #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <SoftwareSerial.h> #include <TinyGPSPlus.h> /******************************************* * A0, A1, A2 Afficheur LCD I2C à la masse * * Mettre un pont de soudure sur les plots * * ***************************************** */ //Pour PCF8574A //LiquidCrystal_I2C lcd(0x38, 2, 1, 0, 4, 5, 6, 7, 3,POSITIVE); //Pour PCF8574 LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3,POSITIVE); #define InRX 4 #define OutTX 3 #define VitGPS 9600 #define VitSerie 115200 SoftwareSerial gpsSerial(InRX, OutTX); TinyGPSPlus gps; void getgps(TinyGPSPlus &gps); char locator[6]; ////////////////////////// // Ensemble de routines // ////////////////////////// /* ************************* * Calcul du QRA locator * * écrit par F**** * ************************* */ void CalculLocator(char *dst, float lat, float lng ) { int lo1, lo2, lo3; int la1, la2, la3; float reste; // longitude reste = lng + 180.0; lo1 = int(reste / 20.0); reste = reste - float(lo1) * 20.0; lo2 = int(reste / 2.0); reste = reste - 2.0 * float(lo2); lo3 = int(12.0 * reste); // latitude reste = lat + 90.0; la1 = int(reste / 10.0); reste = reste - float(la1) * 10.0; la2 = int(reste); reste = reste - float(la2); la3 = int(24.0 * reste); dst[0] = (char)lo1 + 65; dst[1] = (char)la1 + 65; dst[2] = (char)lo2 + 48; dst[3] = (char)la2 + 48; dst[4] = (char)lo3 + 65; dst[5] = (char)la3 + 65; dst[6] = (char)0; } /* ************************* * Transfert datas GPS * * et affichage sur LCD * ************************* */ void getgps(TinyGPSPlus &gps) { lcd.setCursor(0, 0); lcd.print("Lat "); lcd.print(gps.location.lat(),7); if (gps.location.lat() < 0) { lcd.print(" S"); } else { lcd.print(" N"); } lcd.setCursor(0, 1); lcd.print("long "); lcd.print(gps.location.lng(),7); if (gps.location.lng() < 0) { lcd.print(" O"); } else { lcd.print(" E"); } lcd.setCursor(0, 2); lcd.print("Alt "); lcd.print(gps.altitude.meters(),0); lcd.print("m"); CalculLocator(locator, gps.location.lat(), gps.location.lng()); lcd.setCursor(13, 2); lcd.print(locator); lcd.setCursor(1,3); if (gps.date.day() < 10) lcd.print("0"); lcd.print(gps.date.day()); lcd.print("/"); if (gps.date.month() < 10) lcd.print("0"); lcd.print(gps.date.month()); lcd.print("/"); lcd.print(gps.date.year()); lcd.setCursor(12,3); if (gps.time.hour() < 10) lcd.print("0"); lcd.print(gps.time.hour()); lcd.print(":"); if (gps.time.minute() < 10) lcd.print("0"); lcd.print(gps.time.minute()); lcd.print(":"); if (gps.time.second() < 10) lcd.print("0"); lcd.print(gps.time.second()); lcd.setCursor(18,0); if (gps.satellites.value() < 10) lcd.print("0"); lcd.print(gps.satellites.value()); } /* ************************* * Lecture des datas GPS * * toutes les secondes * ************************* */ static void DelaiGPS(unsigned long ms) { unsigned long start = millis(); do { while (gpsSerial.available()) gps.encode(gpsSerial.read()); } while (millis() - start < ms); } /* **************************** * Initialisation matériels * * et programme (une fois) * **************************** */ void setup() { gpsSerial.begin(VitGPS); //Serial.begin(VitSerie); // Utilisé pour le déboguage moniteur USB lcd.begin(20, 4); lcd.setCursor(0, 0); lcd.print("GPSDO 10MHz (*****)"); lcd.setCursor(0, 1); lcd.print("Arduino nano+Ublox 5"); lcd.setCursor(0, 3); lcd.print("** F1*** 01/2017 ** "); delay(3000); lcd.clear(); } /* ************************* * Programme principal * * qui boucle sans fin * ************************* */ void loop() { DelaiGPS(1000); getgps(gps) ; }
Merci de votre réponse mais en gros que dois je changer pour ne plus avoir cette anomalie.
De plus je voudrais mettre une petite video du probleme mais je n'y arrive pas
pouvez vous décrire plus précisément le souci?
pouvez vous poster une photo du montage? avez vous exactement le matériel requis?
ah je viens de voir qu'il y avait un bug important dans le code
il faut changer
enCode:char locator[6];
vous avez un débordement mémoire sinon qui peut mettre le bazar parce que 7 valeurs sont écritesCode:char locator[7];
Code:
1
2
3
4
5
6
7 dst[0] = (char)lo1 + 65; dst[1] = (char)la1 + 65; dst[2] = (char)lo2 + 48; dst[3] = (char)la2 + 48; dst[4] = (char)lo3 + 65; dst[5] = (char)la3 + 65; dst[6] = (char)0;
Attachez un zip ou postez la vidéo sur YouTube et mettez le lien ici
Je ne réponds pas aux MP
étant donné que vous n'utilisez pas le port série pour faire du débug, vous pourriez envisager de connecter le GPS sur les pins 0 et 1 (une fois le code chargé) et utiliser Serial au lieu de l'émulation logicielle SoftwareSerial. ce serait plus robuste.
un truc comme cela (non vérifié - tapé en fonction de votre code)
ce code devrait mettre à jour l'écran à chaque fois que le GPS a fourni une phrase correcte.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <TinyGPSPlus.h> LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); #define gpsSerial Serial // le GPS est connecté sur les pins 0 et 1 (sinon remettre SoftwareSerial) TinyGPSPlus gps; // calcul du QRA locator void calculLocator(char *dst, float lat, float lng ) { int lo1, lo2, lo3; int la1, la2, la3; float reste; // longitude reste = lng + 180.0; lo1 = int(reste / 20.0); reste = reste - float(lo1) * 20.0; lo2 = int(reste / 2.0); reste = reste - 2.0 * float(lo2); lo3 = int(12.0 * reste); // latitude reste = lat + 90.0; la1 = int(reste / 10.0); reste = reste - float(la1) * 10.0; la2 = int(reste); reste = reste - float(la2); la3 = int(24.0 * reste); dst[0] = (char)lo1 + 'A'; dst[1] = (char)la1 + 'A'; dst[2] = (char)lo2 + '0'; dst[3] = (char)la2 + '0'; dst[4] = (char)lo3 + 'A'; dst[5] = (char)la3 + 'A'; dst[6] = '\0'; // fin de chaîne } void affichage() { char buffer[15]; if (gps.location.isValid()) { // on affiche la latitude dtostrf(gps.location.lat(), 9, 7, buffer); strlcat(buffer, (gps.location.lat() < 0) ? " S" : " N", sizeof buffer); lcd.setCursor(6, 0); lcd.print(" "); // on efface l'ancienne valeur lcd.setCursor(6, 0); lcd.print(buffer); // on affiche la nouvelle valeur // on affiche la longitude dtostrf(gps.location.lng(), 9, 7, buffer); strlcat(buffer, (gps.location.lng() < 0) ? " O" : " E", sizeof buffer); lcd.setCursor(6, 1); lcd.print(" "); // on efface l'ancienne valeur lcd.setCursor(6, 1); lcd.print(buffer); // on affiche la nouvelle valeur // on affiche le QRA calculLocator(buffer, gps.location.lat(), gps.location.lng()); // toujours 6 caractères lcd.setCursor(14, 2); lcd.print(buffer); // On affiche le nombre de satellites lcd.setCursor(18, 0); if (gps.satellites.value() < 10) lcd.write('0'); lcd.print(gps.satellites.value()); } else { lcd.setCursor(6, 0); lcd.print("--- --"); // on efface l'ancienne valeur lcd.setCursor(6, 1); lcd.print("--- "); // on efface l'ancienne valeur lcd.setCursor(14, 2); lcd.print("------"); // on efface l'ancienne valeur } // on affiche l'altitude lcd.setCursor(6, 2); if (gps.altitude.isValid()) { snprintf(buffer, sizeof buffer, "% 4dm", (int) gps.altitude.meters()); lcd.print(buffer); // la taille est constante sur 4 chiffres + m, cadré à droite (caractères index 6 à 10 sur l'écran) } else { lcd.print("----m"); } // on affiche la date lcd.setCursor(0, 3); if (gps.date.isValid()) { if (gps.date.day() < 10) lcd.write('0'); lcd.print(gps.date.day()); lcd.write('/'); if (gps.date.month() < 10)lcd.write('0'); lcd.print(gps.date.month()); lcd.write('/'); lcd.print(gps.date.year()); } else { lcd.print("--/--/----"); } // on affiche l'heure lcd.setCursor(12, 3); if (gps.time.isValid()) { if (gps.time.hour() < 10) lcd.write('0'); lcd.print(gps.time.hour()); lcd.write(':'); if (gps.time.minute() < 10) lcd.write('0'); lcd.print(gps.time.minute()); lcd.write(':'); if (gps.time.second() < 10) lcd.write('0'); lcd.print(gps.time.second()); } else { lcd.print("--:--:--"); } } void setup() { gpsSerial.begin(9600); lcd.begin(20, 4); // structure de l'écran lcd.setCursor(0, 0); lcd.print("Lat : --- --"); // lat + nombre de satellites lcd.setCursor(0, 1); lcd.print("Long: --- "); // long lcd.setCursor(0, 2); lcd.print("Alt : ----m ------"); // altitude + QRA lcd.setCursor(0, 3); lcd.print("--/--/---- --:--:--"); // date et heure } void loop() { if (gpsSerial.available()) { if (gps.encode(gpsSerial.read())) affichage(); } }
je vais tester je suis arrivé a mettre sur youtube la video je met le lien pour que vous puissiez voir ce qui ce passe mercia vous
https://youtu.be/QwCA6dg9QL8
pouvez vous sur votre dernier message me faire a main levé le petit schéma de branchement car je ne suis pas doué merci
Rien de particulier au Niveau du câblage - au lieu d'utiliser les pins de sofwtare serial vous utiliser le port materiel : Le Tx du GPS connecté au Rx (pin 0) et le Rx du GPS connecté au Tx (pin 1) avec l'adaptation de tension suivant votre module (on dirait qu'il n'y en a pas sur votre video).
La vidéo c'est mon code ou le votre ?
Le début de la deuxième ligne peut être perturbé si vous écrivez après la fin de la 3ème ligne ce qui correspondrait au locator qui ne serait pas bien construit ou au débordement mémoire dont on parlait. Si vous enlevez l'affichage du locator, voyez vous toujours le clignotement?
Bonjour d'abord un grand merci il y a une avancé spectaculaire apres avoir reussi a mettre le code dans le nano cela fonctionne avec votre code le RX gps au TX1 et le TX gps au RXO du nano une seule chose ne fonctionne pas c'est l'altitude si je peux abuser de votre gentillesse est il difficile de mettre a l'alumage du gps unr presentation comme
GPS THIERRY
LOC / ALT / SAT
FONTENAY en PARISIS
73 QRO
et ensuite afficher la lat long alt etc
Merci encore à vous car je n'y serais pas arrivé
Hello,
Non, c'est assez simple. Il suffit de mettre après le lcd.begin(20, 4) dans la fonction setup(), ces quelque lignes
Attention à ne pas mettre plus de 20 caractères.Code:
1
2
3
4
5
6
7
8
9
10 lcd.setCursor(0, 0); lcd.print("GPS THIERRY") lcd.setCursor(0, 1); lcd.print("LOC / ALT / SAT"); lcd.setCursor(0, 2); lcd.printf("FONTENAY en PARISIS"); lcd.setCursor(0, 3); lcd.printf("73 QRO"); delay(un nombre de seconde); lcd.clear();
J'ai remis le code car cela ne marche pas il m'affiche des choses en rouge
voila ce que ca me dit
Citation:
C:\Users\f5pls\Documents\Arduino\GPSDO\gpsF5PLS2\gpsF5PLS2.ino:119:5: error: 'class LiquidCrystal_I2C' has no member named 'printf'; did you mean 'print'?
lcd.printf("73 QRO");
^~~~~~
Plusieurs bibliothèque trouvées pour "Wire.h"
Utilisé: C:\Users\f5pls\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire
Non utilisé: C:\Users\f5pls\Documents\Arduino\libraries\Wire
Utilisation de la bibliothèque Wire version 1.0 dans le dossier: C:\Users\f5pls\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire
Utilisation de la bibliothèque LiquidCrystalI2C prise dans le dossier: C:\Users\f5pls\Documents\Arduino\libraries\LiquidCrystalI2C (héritage)
Utilisation de la bibliothèque TinyGPSPlus version 1.0.3 dans le dossier: C:\Users\f5pls\Documents\Arduino\libraries\TinyGPSPlus
exit status 1
Compilation error: expected ';' before 'lcd'
et pour laltitude merci encoreCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <TinyGPSPlus.h> LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); #define gpsSerial Serial // le GPS est connecté sur les pins 0 et 1 (sinon remettre SoftwareSerial) TinyGPSPlus gps; // calcul du QRA locator void calculLocator(char *dst, float lat, float lng ) { int lo1, lo2, lo3; int la1, la2, la3; float reste; // longitude reste = lng + 180.0; lo1 = int(reste / 20.0); reste = reste - float(lo1) * 20.0; lo2 = int(reste / 2.0); reste = reste - 2.0 * float(lo2); lo3 = int(12.0 * reste); // latitude reste = lat + 90.0; la1 = int(reste / 10.0); reste = reste - float(la1) * 10.0; la2 = int(reste); reste = reste - float(la2); la3 = int(24.0 * reste); dst[0] = (char)lo1 + 'A'; dst[1] = (char)la1 + 'A'; dst[2] = (char)lo2 + '0'; dst[3] = (char)la2 + '0'; dst[4] = (char)lo3 + 'A'; dst[5] = (char)la3 + 'A'; dst[6] = '\0'; // fin de chaîne } void affichage() { char buffer[15]; if (gps.location.isValid()) { // on affiche la latitude dtostrf(gps.location.lat(), 9, 7, buffer); strlcat(buffer, (gps.location.lat() < 0) ? " S" : " N", sizeof buffer); lcd.setCursor(6, 0); lcd.print(" "); // on efface l'ancienne valeur lcd.setCursor(6, 0); lcd.print(buffer); // on affiche la nouvelle valeur // on affiche la longitude dtostrf(gps.location.lng(), 9, 7, buffer); strlcat(buffer, (gps.location.lng() < 0) ? " O" : " E", sizeof buffer); lcd.setCursor(6, 1); lcd.print(" "); // on efface l'ancienne valeur lcd.setCursor(6, 1); lcd.print(buffer); // on affiche la nouvelle valeur // on affiche le QRA calculLocator(buffer, gps.location.lat(), gps.location.lng()); // toujours 6 caractères lcd.setCursor(14, 2); lcd.print(buffer); // On affiche le nombre de satellites lcd.setCursor(18, 0); if (gps.satellites.value() < 10) lcd.write('0'); lcd.print(gps.satellites.value()); } else { lcd.setCursor(6, 0); lcd.print("--- --"); // on efface l'ancienne valeur lcd.setCursor(6, 1); lcd.print("--- "); // on efface l'ancienne valeur lcd.setCursor(14, 2); lcd.print("------"); // on efface l'ancienne valeur } // on affiche l'altitude lcd.setCursor(6, 2); if (gps.altitude.isValid()) { snprintf(buffer, sizeof buffer, "% 4dm", (int) gps.altitude.meters()); lcd.print(buffer); // la taille est constante sur 4 chiffres + m, cadré à droite (caractères index 6 à 10 sur l'écran) } else { lcd.print("----m"); } // on affiche la date lcd.setCursor(0, 3); if (gps.date.isValid()) { if (gps.date.day() < 10) lcd.write('0'); lcd.print(gps.date.day()); lcd.write('/'); if (gps.date.month() < 10)lcd.write('0'); lcd.print(gps.date.month()); lcd.write('/'); lcd.print(gps.date.year()); } else { lcd.print("--/--/----"); } // on affiche l'heure lcd.setCursor(12, 3); if (gps.time.isValid()) { if (gps.time.hour() < 10) lcd.write('0'); lcd.print(gps.time.hour()); lcd.write(':'); if (gps.time.minute() < 10) lcd.write('0'); lcd.print(gps.time.minute()); lcd.write(':'); if (gps.time.second() < 10) lcd.write('0'); lcd.print(gps.time.second()); } else { lcd.print("--:--:--"); } } void setup() { gpsSerial.begin(9600); lcd.begin(20, 4); //lcd.setCursor(0, 0); //lcd.print("GPS THIERRY") //lcd.setCursor(0, 1); //lcd.print("LOC / ALT / SAT"); //lcd.setCursor(0, 2); //lcd.printf("FONTENAY en PARISIS"); //lcd.setCursor(0, 3); //lcd.printf("73 QRO"); //delay(2000); //lcd.clear(); // structure de l'écran lcd.setCursor(0, 0); lcd.print("Lat : --- --"); // lat + nombre de satellites lcd.setCursor(0, 1); lcd.print("Long: --- "); // long lcd.setCursor(0, 2); lcd.print("Alt : ----m ------"); // altitude + QRA lcd.setCursor(0, 3); lcd.print("--/--/---- --:--:--"); // date et heure } void loop() { if (gpsSerial.available()) { if (gps.encode(gpsSerial.read())) affichage(); } }
Désolé, c'est ma faute. Je suis un programmeur C, et en C une des fonctions pour afficher est la fonction printf() (pour print formatted) ! Je tape automatiquement le f après print (depuis le temps que je code en C !). Il suffit de l'enlever aux lignes 6 et 8.
Et j'ai oublié le ; final ligne 2.
Encore sorry.
donc le code avec écran d'accueil serait
si l'altitude ne se met pas à jour c'est que le test qui vérifie si on a obtenu une altitude du GPS n'est pas validéCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135 #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <TinyGPSPlus.h> LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); #define gpsSerial Serial // le GPS est connecté sur les pins 0 et 1 (sinon remettre SoftwareSerial) TinyGPSPlus gps; // calcul du QRA locator void calculLocator(char *dst, float lat, float lng ) { int lo1, lo2, lo3; int la1, la2, la3; float reste; // longitude reste = lng + 180.0; lo1 = int(reste / 20.0); reste = reste - float(lo1) * 20.0; lo2 = int(reste / 2.0); reste = reste - 2.0 * float(lo2); lo3 = int(12.0 * reste); // latitude reste = lat + 90.0; la1 = int(reste / 10.0); reste = reste - float(la1) * 10.0; la2 = int(reste); reste = reste - float(la2); la3 = int(24.0 * reste); dst[0] = (char)lo1 + 'A'; dst[1] = (char)la1 + 'A'; dst[2] = (char)lo2 + '0'; dst[3] = (char)la2 + '0'; dst[4] = (char)lo3 + 'A'; dst[5] = (char)la3 + 'A'; dst[6] = '\0'; // fin de chaîne } void affichage() { char buffer[15]; if (gps.location.isValid()) { // on affiche la latitude dtostrf(gps.location.lat(), 9, 7, buffer); strlcat(buffer, (gps.location.lat() < 0) ? " S" : " N", sizeof buffer); lcd.setCursor(6, 0); lcd.print(" "); // on efface l'ancienne valeur lcd.setCursor(6, 0); lcd.print(buffer); // on affiche la nouvelle valeur // on affiche la longitude dtostrf(gps.location.lng(), 9, 7, buffer); strlcat(buffer, (gps.location.lng() < 0) ? " O" : " E", sizeof buffer); lcd.setCursor(6, 1); lcd.print(" "); // on efface l'ancienne valeur lcd.setCursor(6, 1); lcd.print(buffer); // on affiche la nouvelle valeur // on affiche le QRA calculLocator(buffer, gps.location.lat(), gps.location.lng()); // toujours 6 caractères lcd.setCursor(14, 2); lcd.print(buffer); // On affiche le nombre de satellites lcd.setCursor(18, 0); if (gps.satellites.value() < 10) lcd.write('0'); lcd.print(gps.satellites.value()); } else { lcd.setCursor(6, 0); lcd.print("--- --"); // on efface l'ancienne valeur lcd.setCursor(6, 1); lcd.print("--- "); // on efface l'ancienne valeur lcd.setCursor(14, 2); lcd.print("------"); // on efface l'ancienne valeur } // on affiche l'altitude lcd.setCursor(6, 2); if (gps.altitude.isValid()) { snprintf(buffer, sizeof buffer, "% 4dm", (int) gps.altitude.meters()); lcd.print(buffer); // la taille est constante sur 4 chiffres + m, cadré à droite (caractères index 6 à 10 sur l'écran) } else { lcd.print("----m"); } // on affiche la date lcd.setCursor(0, 3); if (gps.date.isValid()) { if (gps.date.day() < 10) lcd.write('0'); lcd.print(gps.date.day()); lcd.write('/'); if (gps.date.month() < 10)lcd.write('0'); lcd.print(gps.date.month()); lcd.write('/'); lcd.print(gps.date.year()); } else { lcd.print("--/--/----"); } // on affiche l'heure lcd.setCursor(12, 3); if (gps.time.isValid()) { if (gps.time.hour() < 10) lcd.write('0'); lcd.print(gps.time.hour()); lcd.write(':'); if (gps.time.minute() < 10) lcd.write('0'); lcd.print(gps.time.minute()); lcd.write(':'); if (gps.time.second() < 10) lcd.write('0'); lcd.print(gps.time.second()); } else { lcd.print("--:--:--"); } } void setup() { gpsSerial.begin(9600); lcd.begin(20, 4); // affichage de l'écran d'accueil lcd.clear(); lcd.print(" -- GPS THIERRY --") lcd.setCursor(0, 1); lcd.print(" LOC / ALT / SAT"); lcd.setCursor(0, 2); lcd.print(" FONTENAY en PARISIS"); lcd.setCursor(0, 3); lcd.print("QRA : 73 QRO"); delay(2000); // structure de l'écran lcd.clear(); lcd.setCursor(0, 0); lcd.print("Lat : --- --"); // lat + nombre de satellites lcd.setCursor(0, 1); lcd.print("Long: --- "); // long lcd.setCursor(0, 2); lcd.print("Alt : ----m ------"); // altitude + QRA lcd.setCursor(0, 3); lcd.print("--/--/---- --:--:--"); // date et heure } void loop() { if (gpsSerial.available()) { if (gps.encode(gpsSerial.read())) affichage(); } }
savez vous si votre GPS donne les trames NMEA comportant l'altitude? (dans la trame $GPGGA généralement)Code:
1
2
3
4
5
6
7
8 // on affiche l'altitude lcd.setCursor(6, 2); if (gps.altitude.isValid()) { snprintf(buffer, sizeof buffer, "% 4dm", (int) gps.altitude.meters()); lcd.print(buffer); // la taille est constante sur 4 chiffres + m, cadré à droite (caractères index 6 à 10 sur l'écran) } else { lcd.print("----m"); }
alors apres maintes tentative quand je fais verifier cela fonctionne sans probleme mais quand je televerse voila ce qu'il me mets
alors que le nano est sur le bon port j'ai changer un paquet de cable usb pour voir rien n'y fait si je branche un uno cela fonctionne il televerse bien il y a quelque chose que j'ai pas compris encoreCitation:
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xe4
avrdude: ser_drain(): read error: Acc�s refus�.
Merci a vous et bonnes fetes du travail
il faut débrancher le GPS qui est connecté sur les pins 0 et 1 pendant que vous chargez le code
Bonjour aprtes maintes probleme je suis arrivé a televerser dans mes arduino nano tous fonctionne à 98% et 100% sur certain montage l'altitude fonctionne et pas d'autre donc oups je vous joint un lien youtube pour que vous puissiez voir .merci encore pour votre aide si vous avez la manip pour l'altitude je suis bien sur preneur avec ma sympathie.
Thierry
https://youtu.be/_FkmrXaj1Lg
Bonjour,
Il y a des dizaines de types de trames NMEA, et toutes ne donnent pas l'altitude. Comme tu n'utilises pas le même module GPS pour tes deux montages, il faudrait afficher les trames brutes du module concerné dans le terminal série pour voir si l'altitude s'y trouve.
EDIT : tinygpsplus récupère les infos de plusieurs types de trames NMEA (sentences), ce serait étonnant qu'il n'y trouve pas l'altitude, mais bon...
Exemple de programme à téléverser pour afficher les trames brutes dans le moniteur série (module GPS sur les broches 3 et 4) :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include <SoftwareSerial.h> SoftwareSerial GPS_Serial(4, 3); // RX, TX void setup() { GPS_Serial.begin(9600); Serial.begin(9600); Serial.println("GPS OK"); } void loop() { while (GPS_Serial.available()) { Serial.write(GPS_Serial.read()); } }
Il semble que le test soit fait en intérieur , certains GPS sont plus sensibles que d'autres. Combien avez vous de satellites visibles sur celui qui ne donne pas l'altitude ?
oui mais certains GPS ont besoin qu'on leur envoie des ordres de configurations pour dire quelle trame on veut. Donc peut-être que le GPS qui n'est pas fonctionnel n'envoie pas la bonne trame.
ce serait effectivement bien de connaître les GPS en question.
voici en lien youtube les trame que je prends suite a votre reponse merci de me dire ce que vous en pensez
Merci de votre aide
https://youtu.be/GIYzHPWziCk
Il suffisait de copier-coller un extrait du contenu du Terminal Série plutôt qu'une vidéo où le texte est petit et flou... (surtout si tu finis par supprimer les vidéos qui vont rendre la discussion incompréhensible pour ceux qui auront le même problème que toi et qui passeraient par ici).
Je crois deviner du $GPGGA et du $GPRMC.
L'altitude est dans le 1er type de trame uniquement, juste avant le M vers la fin de ligne (dans les 115m je crois, mais c'est flou).
Voit-on l'altitude dans les trames pour les deux modules GPS ?
Je viens de me rendre compte que la vidéo montrait les trames pour les deux modules GPS (GPS1 et GPS2)...
Avec le module GPS2, on dirait que les trames $GPGGA qui comprennent l'altitude sont plus rares (1 trame sur 5 ou sur 6), non ?