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