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"); }