Go Down

Topic: Frage zu GPS-Daten auswerten und if anweisung (Read 221 times) previous topic - next topic

1981Thomas

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


Code: [Select]

// 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

Tommy56

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

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

1981Thomas

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.


Tommy56

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

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

sth77

#4
Oct 24, 2019, 01:21 pm Last Edit: Oct 24, 2019, 01:24 pm by 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.
Mein verwaister Arduino-Blog: http://www.sth77.de/ - letzter Eintrag: Diamex-ISP in der irgendwann mal aktuellen Arduino-IDE 1.6.4

noiasca

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 https://github.com/mikalhart/TinyGPSPlus/blob/master/src/TinyGPS%2B%2B.h
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

1981Thomas

Hallo danke erst einmal für eure Antworten.

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.



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))


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.

noiasca

Quote
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.
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

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
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

1981Thomas

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

Go Up