NMEA 0183 Checksumme berechnen mit dem Arduino

Am Ende des NMEA 0183 Datensatzes steht immer eine 2-stellige Checksumme *hh.
Wird ein neuer Datensatz (String) geschrieben ist es notwendig die Checksum neu zu berechnen.  Hier zum Beispiel der RMC Datensatz mit der Checkumme *hh am Ende

Die Arduino C Funktion für diese Berechnung.

int getCheckSum(String s) {
// Checksum berechnen und als int ausgeben
// wird als HEX benötigt im NMEA Datensatz
// zwischen $ oder ! und * rechnen
//
// Matthias Busse 18.05.2014 Version 1.1

int i, XOR, c;

  for (XOR = 0, i = 0; i < s.length(); i++) {
    c = (unsigned char)s.charAt(i);
    if (c == '*') break;
    if ((c!='$') && (c!='!')) XOR ^= c;
  }
  return XOR; 
}

Die Funktion gibt einen Integer Wert zurück, der als HEX Zahl an den neuen Datensatz gehängt wird mit einem * davor und \n  dahinter.

von Matthias Busse

Hilfreiche Links
NMEA.de

Ein Gedanke zu „NMEA 0183 Checksumme berechnen mit dem Arduino

  1. Pingback: AIS VDM Datensatz Decoder mit dem Arduino Uno | Shelvin – Elektronik ausprobiert und erläutert

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.