NMEA0183 2-fach Multiplexer zu USB mit dem NMEA shield

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

Ein Gedanke zu „NMEA0183 2-fach Multiplexer zu USB mit dem NMEA shield

  1. Pingback: Das NMEA Shield für den Arduino Mega 2560 ist fertig | Shelvin – Elektronik ausprobiert und erläutert

Schreibe einen Kommentar

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