Zwei NMEA0183 Dateneingänge sollen an den PC per USB weiter gegeben werden.
Dazu werden die einzelnen Datensätze von Serial2 und Serial3 gelesen. Immer wenn ein Datensatz vollständig ist (CR – neue Zeile) wird das erkannt und der Datensatz wird auf die USB Schnittstelle (Serial) ausgegeben.
Die beiden Eingänge können unterschiedliche Baudraten haben, zum Beispiel 4800 (GPS) und 38400 (AIS). Die Ausgangsbaudrate muß dann allerdings so hoch gewählt werden, daß beide Datensätze ausgegeben werden können. Ansonsten kommt es zu einem Datenüberlauf am Ausgang.
Hier werden beide Eingänge mit 4800 Baud gelesen und die Datensätze werden mit 38400 Baud ausgegeben.
// 2-fach NMEA0183 Multiplexer zu USB // Zwei NMEA0183 Dateneingänge Rx1 und Rx2 werden gelesen und // die Datensätze werden nacheinander an USB ausgegeben. // Verwendet wurden: Arduino Mega mit NMEA Shield Version 1.7 // // von Matthias Busse Version 1.0 vom 7.4.2017 char inByte; int start1=0, start2=0; String nmea1 = "2 NMEA Datensaetze multiplexen und auf USB ausgeben Version 1.0 Matthias Busse"; String nmea2 = "2 NMEA Datensaetze multiplexen und auf USB ausgeben Version 1.0 Matthias Busse"; void setup() { Serial.begin(38400); // USB Baudrate Serial2.begin(4800); // NMEA0183 Baudrate Rx2 Serial3.begin(4800); // NMEA0183 Baudrate Rx1 } void loop() { if(Serial3.available()) { // Wenn Daten an Rx1 vor liegen inByte = Serial3.read(); // Daten von Rx1 lesen if ((start1==0) && ((inByte == '$')||(inByte == '!'))) { start1=1; nmea1=""; // bei $ oder ! starten } if(start1==1) {nmea1.concat((char)inByte);} // das Zeichen anhängen if((inByte==13) && (start1==1)) { // CR > Datensatzende > NMEA ausgeben start1=0; Serial.println(nmea1); // alles auf USB ausgeben } } if(Serial2.available()) { // Wenn Daten an Rx2 vor liegen inByte = Serial2.read(); // Daten von Rx2 lesen if ((start2==0) && ((inByte == '$')||(inByte == '!'))) { start2=1; nmea2=""; // bei $ oder ! starten } if(start2==1) {nmea2.concat((char)inByte);} // das Zeichen anhängen if((inByte==13) && (start2==1)) { // CR > Datensatzende > NMEA ausgeben start2=0; Serial.println(nmea2); // alles auf USB ausgeben } } }
Verwendet wurden:
Arduino Mega 2560
NMEA Shield Version 1.7
Arduino Software 1.8.0
von Matthias Busse
Pingback: Das NMEA Shield für den Arduino Mega 2560 ist fertig | Shelvin – Elektronik ausprobiert und erläutert