Arduino mega GPS neo-6 read Altitude

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
}

Buongiorno e benvenuto nella sezione Italiana del forum,

:warning: prima di tutto ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato, dopo di che ...

... leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento, fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Detto questo, come richiesto al punto 7 del succitato regolamento, per favore edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE).

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione e sistemato il codice come indicato, nel rispetto del regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.