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

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