Frage zu GPS-Daten auswerten und if anweisung

Bin absoluter Anfänger und bin gerade dabei mir die ganze Sache anzuschauen und zu erlernen.

Zum Testaufbau Arduino UNO mit einem GPS-Modul (neo m6) über RC TX verbunden und ein LCD-Display über I2C verbunden.
Jetzt zu meinem Problem wo mir das Wissen fehlt.

Frage 1.
Wenn keine GPS Daten vorhanden sind (z.B. kein Empfang) soll auf dem Display ein Text ("kein GPS-Signal") ausgegeben werden.

Frage 2.
Wenn "lcd.print(">70");" und "lcd.print(">100");" einmal geschrieben sind bleiben die auf dem Display stehen, auch wenn die if Bedingungen (z.B. if (gps.speed.kmph() >= 70)) nicht mehr erfüllt sind. Gibt es da ein einfachen weg?

danke für eure Zeit

// binde die Bibliothek SoftwareSerial ein
#include <SoftwareSerial.h>

// binde die Bibliothek TinyGPS++ ein
#include <TinyGPS++.h>

// binde die Bibliothek Wire für I2C-Bus ein
#include <Wire.h>

// binde die Bibliothek LiquidCrystal_I2C für das LCD Display ein
#include <LiquidCrystal_I2C.h>

// legt die Eigenschaften vom LCD Display fest. 0x27 = I2C Adresse vom LCD Display , 16 = Zeichen pro Zeile möglich , 4 = Anzahl der Zeilen vom Display
LiquidCrystal_I2C lcd(0x27,16,2);

// definiert einen TinyGPSPlus Typ mit dem Name gps.
TinyGPSPlus gps;

// definiert einen SoftwareSerial Typ mit dem Name ss und difiniert die Pins für 4(Rx) aund 3(Tx)
SoftwareSerial ss(3 ,4);

byte antenne[8] =
{
0b00100,
0b10101,
0b01010,
0b00100,
0b00100,
0b00100,
0b00100,
0b00100
};

void setup()
{
  // datenrate für den Serial Schnittstelle z.B. SerialMonitor
  Serial.begin(9600); 
  
  // datenrate für den Serial Schnittstelle des GPS-Empfänger
  ss.begin(9600);
  
  // LCD initialisieren
  lcd.init();
  
  // Hintergrundlicht einschalten
  lcd.backlight();
  
  // LCD Inhalt löschen
  lcd.clear(); 

  lcd.createChar(0, antenne);
}

void loop()
  { 
  if (ss.available() > 0)
    {
    gps.encode(ss.read());
    if (gps.location.isUpdated())
      {
      Serial.print("LAT=");  Serial.println(gps.location.lat(), 6);
      Serial.print("LONG="); Serial.println(gps.location.lng(), 6);
      Serial.print("km/h"); Serial.println(gps.speed.kmph());
      lcd.setCursor(0,0);
      lcd.write(byte(0));
      lcd.setCursor(2,0); 
      lcd.print(gps.speed.kmph());  
      lcd.print("km/h");
      if (gps.speed.kmph() >= 50)
        {
        lcd.setCursor(0,1);
        lcd.print(">50");
        }
      else
        {
        lcd.setCursor(0,1);
        lcd.print("50<");
        } 
      if (gps.speed.kmph() >= 70)
        {
        lcd.setCursor(4,1);
        lcd.print(">70");
        }
      if (gps.speed.kmph() >= 100)
        {
        lcd.setCursor(8,1);
        lcd.print(">100");
        }                
      }
    }
  }

mfg

Du musst es wieder an der gleichen Stelle überschreiben, wenn es weg soll.

Gruß Tommy

Tommy56:
Du musst es wieder an der gleichen Stelle überschreiben, wenn es weg soll.

Gruß Tommy

Ok danke ich dachte, da gibt es eine einfache Lösung irgendwie.

Denn benötige ich nur noch Hilfe für Frage 1.

Das ist doch einfach.
Woran erkenns Du, dass kein Signal da ist? Ich habe kein GPS-Modul.

Gruß Tommy

In der Regel kommen die GPS-Daten im NMEA-Format an. Da gibt es Beispielsweise die $GPGGA-Zeichenfolge, an 4. Stelle kommt di "Fix quality". Kann man bspw. hier schön nachlesen: https://www.gpsinformation.org/dale/nmea.htm#GGA. Abfrage auf 0 heißt also kein gültiges GPS-Signal.

[edit] Oder man holt es sich aus dem $GPGSA: Dort wird noch nach "no fix, "2D-fix" und "3D-fix" unterschieden.

1981Thomas:
Denn benötige ich nur noch Hilfe für Frage 1.

dann wirf mal einen Blick in das BasicExample der Library. Da wirst du so etwas finden:

if (gps.location.isValid())

wenn das nicht gefällt, dann eine der vielen anderen Methoden die diese lib mitbringt.
Du findest alle in der .h der Library TinyGPSPlus/src/TinyGPS++.h at master · mikalhart/TinyGPSPlus · GitHub

Hallo danke erst einmal für eure Antworten.

Tommy56:
Das ist doch einfach.
Woran erkenns Du, dass kein Signal da ist? Ich habe kein GPS-Modul.

Gruß Tommy

]

Wenn kein Signal mehr anliegt. Aber wie prüfe ich dieses.

sth77:
In der Regel kommen die GPS-Daten im NMEA-Format an. Da gibt es Beispielsweise die $GPGGA-Zeichenfolge, an 4. Stelle kommt di "Fix quality". Kann man bspw. hier schön nachlesen: https://www.gpsinformation.org/dale/nmea.htm#GGA. Abfrage auf 0 heißt also kein gültiges GPS-Signal.

[edit] Oder man holt es sich aus dem $GPGSA: Dort wird noch nach "no fix, "2D-fix" und "3D-fix" unterschieden.

Abfrage auf Null hatte ich auch gedacht aber es ging nicht oder jedenfals so ich es gedacht habe.
(if (ss.available() == 0))

noiasca:
dann wirf mal einen Blick in das BasicExample der Library. Da wirst du so etwas finden:

if (gps.location.isValid())

wenn das nicht gefällt, dann eine der vielen anderen Methoden die diese lib mitbringt.
Du findest alle in der .h der Library https://github.com/mikalhart/TinyGPSPlus/blob/master/src/TinyGPS%2B%2B.h

Ok werde es mal mit " if (gps.location.isValid()) " Probieren.
Habe auch ein blick in die Bibliothek geworfen aber mit ein Kenntnisstand habe ich da nicht viel von verstanden.
Was macht der die " gps.location.isValid " beziehungsweise " .isValid " genau?

Gibt es eine Liste mit den ganzen Befehlen und Erklärung zur TinyGPSPlus Bibliothek.

Gibt es eine Liste mit den ganzen Befehlen und Erklärung zur TinyGPSPlus Bibliothek.

die .h ist eine perfekte Liste mit allen "Befehlen".

Arbeite alle Beispiele der Lib durch.

Hi

Noch Mal zum Display:
Das LCD ist ein eigenständiger Kontroller - Der bekommt vom Arduino nur gesagt 'Setze den Cursor auf 3/1' und 'Male Da ein H hin'.
Wen nder Arduino keine weiteren Befehle zum Display schickt, macht das Display 'Sein Ding' - also sich um die Anzeige kümmern (der µC Da drauf hat also durchaus was zu tun) - Er ändert aber NICHTS an der Anzeige, solange Du (über den Arduino) Das nicht befiehlst.

So ist Das mit ziemlich vielen Dingern, Die man am Arduino anstöpseln kann - fast überall stecken eigene µC drin und der Arduino schwätzt 'nur' mit Diesen - was Die dann daraus machen ... liegt an Deren Programm.

Auch musst Du nicht in jedem loop()-Durchlauf, wo kein GPS-Empfang statt fand (ist eh nur alle 2 Sekunden so) das Display aktualisieren, also 'kein GPS' brauchst Du nur 1x hinschreiben, wenn kein GPS vorhanden ist und wir diese Information NOCH NICHT auf das Display gepinnt haben (wir müssen uns also merken, daß wir Das geschrieben haben, damit wir Das nicht erneut schreiben).

MfG

postmaster-ino:
Hi

Noch Mal zum Display:
Das LCD ist ein eigenständiger Kontroller - Der bekommt vom Arduino nur gesagt 'Setze den Cursor auf 3/1' und 'Male Da ein H hin'.
Wen nder Arduino keine weiteren Befehle zum Display schickt, macht das Display 'Sein Ding' - also sich um die Anzeige kümmern (der µC Da drauf hat also durchaus was zu tun) - Er ändert aber NICHTS an der Anzeige, solange Du (über den Arduino) Das nicht befiehlst.

So ist Das mit ziemlich vielen Dingern, Die man am Arduino anstöpseln kann - fast überall stecken eigene µC drin und der Arduino schwätzt 'nur' mit Diesen - was Die dann daraus machen ... liegt an Deren Programm.

Auch musst Du nicht in jedem loop()-Durchlauf, wo kein GPS-Empfang statt fand (ist eh nur alle 2 Sekunden so) das Display aktualisieren, also 'kein GPS' brauchst Du nur 1x hinschreiben, wenn kein GPS vorhanden ist und wir diese Information NOCH NICHT auf das Display gepinnt haben (wir müssen uns also merken, daß wir Das geschrieben haben, damit wir Das nicht erneut schreiben).

MfG

Ok danke euch