Cioa Ragazzi
Sono un appassianto senior di arduino mega e sto implementando una stazione meteo dove ho inserito anche il GPS neo 6
Tutto funziona bene quando provo il GPS in una semplice funzione void .
Il mio programma prevede tutta una serie di sensori che sono richimati da lla rispettiva sequenza di funzioni dei rispettivi sensori (Temp,pressione atm, umidità, ecc.)
il tutto è collegato ad una scheda ethernet shield con cui ho realizzato una schermata html.
La cosa strana del gps è che se lo eseguo in un semplice sketch il codicefunziona perfettamente , ma se copio il solito codice nella sua funzione void GPSFunction() sembra all' interno di un programma più complesso , eseguitao in sequeza alle altre funzione , sembra che la seriale3 non riesca ad acquisire l'altezza e numero di satelliti , mentre le coordinate sono perfettamente acquisite ... Non ne esco ....., seono 3 giorni che ci provo con differentio sketch ma neinte ... mi sono arrenato...
Riuscite ad aitarmi )...
Ringraziandovi in anticipo Vi allego il codice per il quale troverete anche riferimenti al nextion ad esso colegato ,.
void GPSFunction(){
txtdata8.setText("Start");//nextion Loop Dashboard
if (millis() > GPSpulsetime) {
GPSStatus = F("#FF0000\">GPS lost Satellites Conn.</td></tr>");
SatStaus.setText("0");//nextion Loop Dashboard
}
input = digitalRead(PPSinput);//legge lingresso PPS della scheda GPS collegato all' ingresso arduino ed esefgue la funzione di lettura
if (input == HIGH) {
Serial.println(F("PPS pulse from GPS module detected"));
Serial.println("");
if (lat == 0) {
GPSStatus = F("#32CD32\">GPS Detected</td></tr>");
SatStaus.setText("1");//nextion Loop Dashboard
}
Serial.println(F(""));
GPSpulsetime = millis() + 60000;
while (digitalRead(PPSinput) == HIGH) //define the exit condition from the GPS loop
{
while (Serial3.available())// check for gps data
{
if (gps.encode(Serial3.read()))// encode gps data
{
//getting Latitude and Longitude
//Serial.println(F("Start Capture Position Loop "));
gps.f_get_position(&lat, &lon , &fix_age); // Get latitude and longitude
gpsalt=(gps.f_altitude());// +/- altitude in meters
delay(15);
Latitude = (String(lat, 6));
Longitude = (String(lon, 6));
GPSAltitude=(String(gpsalt));// +/- altitude in meters
delay(50);
GPSCoordinate =("Lat:"+Latitude + " Long:"+ Longitude + " Alt:" + GPSAltitude);
//Serial.print(GPSCoordinate);
//GPSTime
gps.crack_datetime(&year, &month, &day,&hour, &minute, &second, &hundredths, &fix_age);//estract the data from GPS data
GPSTime = (" Time="+String (hour+1) + ":"+String (minute)+":"+String(second));
//GPS Data
GPSNSat=(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
GPSPrecision=(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
GPSData=(" N°Satelites ="+String (GPSNSat)+" Precision="+String(GPSPrecision));
//Serial.println("Data:"+GPSData);
Serial.println ("GPS Data>>>>> "+GPSCoordinate+GPSTime+GPSData);
}
}
}
gpsoffline = 0;
} else {
gpsoffline++;
if (gpsoffline == 100) {
Serial.println(F("satelite not detected "));
gpsoffline = 0;
GPSStatus = F("#FF0000\">GPS Pulse not Detect.</td></tr>");
SatStaus.setText("0");//nextion Loop Dashboard
}
}
txtdata8.setText("Stop");//nextion Loop Dashboard
LatDisplay.setText(Latitude.c_str()); //Set the Latitude value in the page. 0 of nextion "Latuitude" trought the string onvertion (.c_str())of Latitude data
LonDisplay.setText(Longitude.c_str());//Set the Longitude value in the page. 0 of nextion "Longitude" trought the string onvertion (.c_str())of Latitude data
}