> Start > Schaltungen
 

OpenSeaMap Wassertiefe Datenlogger
Teil 2 - Datensätze auswählen

Teil 2: Es sollen nur bestimmte Datensätze ausgegeben werden.

Das Problem: Überflüssige Datensätze sollen erkannt und nicht ausgegeben werden.

Die Lösung: NMEA Datensätze fangen mit $ an und dann folgt der Sender mit 2 Zeichen (z.B. GP für GPS). Dann der Datensatz. Hier verwendet das OSM Projekt die Datensätze RMC, DPT, DBK, DBS und DBT. Nur diese Datensätze sollen also ausgegeben werden.

Die fertige Arduino 1.0.5 Datei zum Download.

Hier nun der Arduino Programmcode mit Kommentaren:

// Projekt OpenSeaMap Daten Logger
//
// Teil 2 : Datensätze auswählen
// Hardware:  
// GPS mit NMEA 0183 Datenausgang
// MAX232N: RS232 > USART Wandler
// 5 x 1uF Kondensatoren
// Arduino Uno
//
// Matthias Busse 1.12.2013 Version 0.2

int inByte, start=0;
String nmea = "OSM Logger Dateneingang, Version 0.2 Matthias Busse"; // reservieren

void setup() {
  Serial.begin(4800); // 4800 Baud Dateneingang und Konsole
  Serial.println(nmea);
}

void loop() {
  if (Serial.available()) { // Sind Daten im Eingangspuffer
    inByte = Serial.read(); // dan lesen
    if ((start==0) && (inByte == '$')) {start=1; nmea="";} // bei $ starten
    if(start==1) {nmea.concat((char)inByte);} // das Zeichen anhängen
    if((inByte==13) && (start==1)) { // CR > Datensatzende > NMEA ausgeben
      start=0; 
      schreiben();
    } 
  }
}  

void schreiben() { 
// Nur die gewünschten Datensätze rausschreiben.
// http://wiki.openstreetmap.org/wiki/DE:Water_Depth
// RMC, DPT, DBK, DBS, DBT

  if (nmea.substring(3,6) == "RMC") { // $--RMC
    Serial.println(nmea);
    return;
  } 
  if (nmea.substring(3,6) == "DPT") { // $--DPT
    Serial.println(nmea);
    return;
  } 
  if (nmea.substring(3,6) == "DBK") { // $--DBK
    Serial.println(nmea);
    return;
  } 
  if (nmea.substring(3,6) == "DBS") { // $--DBS
    Serial.println(nmea);
    return;
  } 
  if (nmea.substring(3,6) == "DBT") { // $--DBT
    Serial.println(nmea);
    return;
  } 
}

Dann werden die Daten so oder ähnlich auf der Konsole ausgegeben.

OSM Logger Dateneingang, Version 0.2 Matthias Busse
$GPRMC,130118.303,A,5415.6236,N,01004.9775,E,000.0,000.0,011213,002.0,E*6D
$GPRMC,130119.301,A,5415.6236,N,01004.9774,E,000.0,000.0,011213,002.0,E*6F
$GPRMC,130120.383,A,5415.6236,N,01004.9774,E,000.0,000.0,011213,002.0,E*6F

Wir haben nun also nur den Datensatz RMC von der GPS Antenne.
Die Tiefendaten werden später zusätzlich benötigt vom Echolot.

Das Projekt: Teil 1 < > Teil 3

Fragen hierzu kann ich aus Zeitgründen nicht beantworten.
Hilfreiche Links sind: Arduino Homepage.

OpenSeaMap Wassertiefe Datenlogger
Teil 2 - Datensätze auswählen

letzte Änderung 12.2013