Bonjour à tous,
1er message sur le forum, car je rencontre un petit problème qui me fait faire du sur place depuis quelques jours.
J'ai à ma disposition un Arduino Mega, un écran TFT ADA1651 et un GPS NEO6MV2.
Mon but est d'afficher certaines informations en provenance du GPS directement sur le TFT.
Je pilote sans problème le TFT, en affichant à ma guise des informations d'autres capteurs.
Je récupère bien les informations en provenance du GPS et les affiche dans le moniteur série.
La ou ça se complique, c'est lorsque je mixe le GPS avec le TFT. Le TFT fonctionne, mais aucune remontée d'info de la part du GPS, même pas sur le moniteur série.
Quand le TFT est actif, dans la fonction GPS(), je ne rentre jamais dans la boucle, car gpsSerial.available() ne passe jamais à true.
Si dans mon code je mets en commentaire toute la partie TFT, le GPS crache des infos sur le moniteur série.
Le pb arrive des que je décommente tft.begin();.
//Définition des librairies à utiliser
//GPS
#include <SoftwareSerial.h>
#include <TinyGPS.h>
//TFT
#include <Adafruit_GFX.h> // Core graphics library
#include <SPI.h>
#include <Wire.h> // this is needed even tho we aren't using it
#include <Adafruit_ILI9341.h>
#include <Adafruit_STMPE610.h>
#include <Adafruit_SPITFT.h>
#include <Adafruit_SPITFT_Macros.h>
// This is calibration data for the raw touch data to the screen coordinates
#define TS_MINX 150
#define TS_MINY 130
#define TS_MAXX 3800
#define TS_MAXY 4000
// The STMPE610 uses hardware SPI on the shield, and #8
#define STMPE_CS 8
Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS);
// The display also uses hardware SPI, plus #9 & #10
#define TFT_CS 10
#define TFT_DC 9
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// Size of the color selection boxes and the paintbrush size
#define BOXSIZE 40
#define PENRADIUS 3
// Creation des variables liées au GPS
long lat, lon;
unsigned long vitesse,vitessekmh, alti;
int year;
byte month, day, hour, minutes, second, hundredths,statusGPS;
unsigned long fix_age;
SoftwareSerial gpsSerial(51,49); // Creation des connexions (Tx,Rx) du GPS
TinyGPS gps; // Creation de l'objet gps
void setup() {
Serial.begin(115200); // Connexion série
gpsSerial.begin(9600); // Connexion du GPS
tft.begin(); //Connexion à l'écran TFT
//rotation de l'écran en paysage
tft.setRotation(1);
tft.fillScreen(ILI9341_BLACK);
//Allumage de l'écran en pleine luminositée
analogWrite(3,255);
Serial.println("En attente de GPS");
tft.setCursor(100 , 100);
tft.setTextColor(ILI9341_WHITE);
tft.print("Hello");
}
void loop()
{
GPS();
}
void GPS()
{
// affichage des coordonnées latitude et longitude chaque 1 seconde
while (gpsSerial.available()) {
if (gps.encode(gpsSerial.read())) {
Serial.print("Nb satellites utilisés: ");
Serial.println(gps.satellites(), DEC);
statusGPS=1;
gps.get_position(&lat, &lon); // récupère latitude et longitude
alti=gps.f_altitude();
vitesse=gps.f_speed_kmph();
vitessekmh=(vitesse/100)*1.852;
// Récuperation du temps et de la date
gps.crack_datetime(&year, &month, &day, &hour, &minutes, &second, &hundredths, &fix_age);
Serial.print(day);Serial.print("/");Serial.print(month);Serial.print("/");Serial.print(year);Serial.print(" ");Serial.print(hour);Serial.print(":");Serial.print(minutes);Serial.print(":");Serial.println(second);
Serial.println(fix_age);
// Affichage de la position
Serial.print("Position: ");
Serial.print("coordonnées ");
Serial.print(lat / 1000000);
Serial.print(".");
Serial.print(lat % 1000000);
tft.setCursor(140 , 140);
tft.setTextColor(ILI9341_WHITE);
tft.print(lat);
Serial.print(" "); // Afficher la latitude sur le moniteur série
Serial.print(", ");
Serial.print(lon / 1000000);
Serial.print(".");
Serial.println(lon % 1000000); // Afficher la longitude sur le moniteur série
Serial.print("Altitude: ");
Serial.print(alti);
Serial.print(" / Vitesse: ");
Serial.println(vitessekmh);
Serial.println();
delay(1000);
}
}
}
J'ai essayé ce code aussi, en changeant les pins du GPS, et j'obtiens exactement les mêmes symptômes: TFT ok mais pas de GPS, et lorsque je commente la partie TFT je récupère les infos du GPS sur le moniteur série.
https://forum.arduino.cc/index.php?topic=608455.0
Voila ou j'en suis. Si vous avez des idées, je suis tout à votre écoute.
Merci d'avance.