Bonjour,
je butte depuis quelques temps sur un conflit d'affichage entre une arduino nano et un écran Nextion.
lorsque j'affiche toutes les variables sans le code pour le GPS via "SoftWareSerial" directement sur le Nextion tout les affichage sont corrects.
mais une fois le code GPS en fonction, il n'y a plus d'infos reçu par le Nextion.
y a t'il un moyen de prendre les infos du GPS autrement, car le Nextion ne fonctionne que en série (tx-rx)
#include <Nextion.h> // théoriquement sufisant mais ne fonctionne pas sans le reste "Next" ?
#include <NexButton.h>
#include <NexProgressBar.h>
#include <NexGauge.h>
#include <NexNumber.h>
#include <NexPage.h>
#include <NexText.h>
#include <NexVariable.h>
#include <Wire.h>
#include <SDP6xx.h>
/*********************** GPS **********************************/
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
// The TinyGPS++ object
TinyGPSPlus gps;
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
/************************ variable GPS ************************/
double lat2 ; // set Nextion
double lon2 ; // set Nextion
double gisement;
int route;
int dif;
float distance=0.0;
float tlatRad, tlonRad;
float midLat, midLon;
float dist = 0.0;
float latRad = lat2;
float lonRad = lon2;
/*********************** page Nextion **************************/
NexPage pageaccueil = NexPage(0, 0, "accueil");
NexPage pageaffichage = NexPage(1, 0, "page0");
NexProgressBar Init = NexProgressBar(0, 2, "init");
/********************* horloge Nextion *************************/
NexNumber heures = NexNumber(2, 23, "n0"); // Heures
NexNumber minutes = NexNumber(2, 24, "n1"); // Minutes
NexNumber secondes = NexNumber(2, 25, "n2"); // Secondes
/********************* vitesse Nextion *************************/
NexProgressBar j0 = NexProgressBar(1, 3, "j0"); // Compteur
NexNumber vi = NexNumber(1, 2, "via"); // Vitesse air page 1
NexNumber vs = NexNumber(1, 6, "vis"); // Vitesse sol page 1
NexNumber vit = NexNumber(7, 10, "va"); // Vitesse air page 7
NexNumber vso = NexNumber(7, 6, "vs"); // Vitesse sol page 7
/*********************** alti Nextion **************************/
NexNumber qnh5 = NexNumber(5, 10, "qnhpage5"); // Vitesse sol page 7
NexNumber alt = NexNumber(1, 16, "valeuralti"); // Altitude en mètres
/********************** GPS Nextion ***************************/
NexNumber Lati = NexNumber(8, 4, "latitude");
NexNumber Long = NexNumber(8, 5, "longitude");
NexNumber sat = NexNumber(5, 2, "nbsat");
NexNumber satel = NexNumber(1, 17, "nbsat2");
/********************** Nav Nextion ***************************/
NexGauge routeV = NexGauge(7, 1, "z0");
NexNumber compas = NexNumber(7, 2, "comp");
NexNumber Dist = NexNumber(7, 9, "x0");
NexVariable Va2 = NexVariable(7, 21, "va2");
uint32_t number;
void setup() {
nexInit ();
Serial.begin(9600);
Wire.begin();
for (int i=1;i<=50;i++) // boucle en prévision d'un calcul de calibration
{
if(i<2) // affichage barre graphe
{ pageaccueil.show();}
int pourcentage2 = map(i, 0, 50, 0, 100);
Init.setValue(pourcentage2);
delay(20);
}
pageaffichage.show();
}
void loop() {
/***************************** GPS *****************************/
while (ss.available() > 0){
gps.encode(ss.read());
if (gps.location.isUpdated()){
int vsol = gps.speed.kmph();
int Alt = gps.altitude.meters();
float Latitude = gps.location.lat ();
float Longitude = gps.location.lng();
int Sat = gps.satellites.value();
vs.setValue(vsol); // vitesse sol page 1
vso.setValue(vsol); // vitesse sol page 7
alt.setValue(Alt); // altitude page 1
sat.setValue(Sat); // Nb satellites page 7
satel.setValue(Sat); // Nb satellites page 1
qnh5.setValue(Alt); // altitude page 5
}
}
/********************** capteur vitesse air ********************/
int pa = (SDP6xx.readPA())/60;
int vms = sqrt(2*pa/1.293);
int airspeed = vms*3.6;
vi.setValue(airspeed); // vitesse air page 1
vit.setValue(airspeed); // vitesse air page 7
int pourcentage = map(airspeed, 0, 140, 0, 100);
j0.setValue(pourcentage); // vitesse barregraphe page 1
/*********************** Horloge ****************************/
heures.setValue(gps.time.hour()+2); // (h)
minutes.setValue(gps.time.minute()); // (m)
secondes.setValue(gps.time.second()); // (s)
/******************* Calcul Gisement ***********************/
Va2.getValue (& number); // lis la valeur du bouton GPS
if (number > 0){
lat2 = gps.location.lat ()* 0.017453293;
lon2 = gps.location.lng ()* 0.017453293;
}
double lat1 = gps.location.lat() * 0.017453293; // mobile
double lon1 = gps.location.lng() * 0.017453293; // mobile
double longDelta = lon2 - lon1;
double y = sin(longDelta) * cos(lat2);
double x = cos(lat1)*sin(lat2) - sin(lat1)*cos(lat2)*cos(longDelta);
gisement = degrees(atan2(y, x));
while (gisement < 0) {
gisement += 360;
}
/********************* Calcul Distance **********************/
tlatRad = gps.location.lat() * 0.017453293;
tlonRad = gps.location.lng() * 0.017453293;
midLat = tlatRad - latRad;
midLon = tlonRad - lonRad;
float latSin = sin((latRad - tlatRad)/2);
float lonSin = sin((lonRad - tlonRad)/2);
dist = 2 * asin(sqrt((latSin*latSin) + cos(latRad) * cos(tlatRad) * (lonSin * lonSin)));
dist = dist * 6371; // pour la distance en Km il faut multiplier la valeure trouvée par le rayon de la terre
/********************* Calcul Route **********************/
int degr = gps.course.deg();
if (degr <= 180){
if (degr<gisement){
route = gisement - degr;
}
if ( degr>gisement) {
route = degr - gisement;
}
}
if (degr > 180) {
if (degr<gisement){
dif = gisement - degr;
route = 360 - dif;
}
if ( degr>gisement) {
dif = degr - gisement;
route = 360 - dif;
}
}
compas.setValue(degr);
routeV.setValue((route)+90);
}
