Serielle Datenstring vom Computer im Adruino Mega einlesen und aufteilen

Benziner:
Jetzt funzt es wie es soll!!!!

Bin ich zu spät. Schade.
Ich hatte mich von vorn bis hier durch den Thread gelesen und hab das mal komplett abgekürzt.
Keine Umrechnerei.
Komplett neu geschrieben.
Na probiers mal.
[edit2] Ich hatte einen ersten Codeversuch drin, der bleibt auch drunter - der richtige wäre der folgende.
Die Ausgabe ist die selbe, aber damit funktioniert auch das was ich schon schrieb, wenn es um die Fahreranzahl geht....

// Umsetzung Daten einlesen
// Vorgaben:
const byte fahrer = 4;    // Anzahl Fahrer
const byte charName = 30; // Anzahl Stellen Fahrername

// Bxx ist ein Datensatz
unsigned int BRZvk;       // Beste Rundenzeit Vorkomma
unsigned int BRZnk;       // Nachkomma
char BRF[charName];       // Fahrername
unsigned int BRS;

// AR - RZ - F werden mehrere Datensätze
unsigned int AR[fahrer];  // Runden des Fahrer
unsigned int RZvk[fahrer];// Rundenzeit Vorkomma des Fahrer
unsigned int RZnk[fahrer];// Rundenzeit Nachkomma
char F[fahrer][charName]; // Fahrername
// Ende Vorgaben Umsetzung Daten einlesen

bool ausgabe = false;     // Nur ausgeben wenn Änderung

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
}

void loop()
{
  delay(1000);
  readSerial();
  serMon();
}

void readSerial()
{
  const int breakTimeRead = 500; // Abbruchzeit in ms
  char readChar;                 // Einzelnes Zeichen
  byte x = 0;                    // Position im Array
  char buf[30] = "\0";           // Zwischenspeicher

  unsigned long lastmillis = millis(); // Startzeit merken...
  while (Serial.available() > 0 && millis() - lastmillis < breakTimeRead)
  {
    readChar = Serial.read();
    if (readChar == ';')
    {
      ausgabe = true;
      Serial.print("Teile "); Serial.println(buf);
      teileBuf(buf);
      x = 0;
    }
    else
    {
      buf[x] = readChar;
      x++;
    }
  }
}

// BRZ:6,777;BRF:Paul Mustermann;BRS:4;AR1:5;RZ1:0,000;F1:Friedhelm Busch;AR2:0;RZ2:0,000;F2:Max Jägermeister;AR3:0;RZ3:0,000;F3:Paul Mustermann;AR4:0;RZ4:0,000;F4:Thorsten Hesse;
void teileBuf(char *buf)
{
  char *c;
  c = strtok(buf, ":");
  if (!strncmp(c, "BRZ", 3)) {
    c = strtok(NULL, ",");
    BRZvk = atoi(c);
    c = strtok(NULL, ",");
    BRZnk = atoi(c);
  }
  if (!strncmp(c, "BRF", 3)) {
    c = strtok(NULL, ":");
    strcpy(BRF, c);
  }
  if (!strncmp(c, "BRS", 3)) {
    c = strtok(NULL, ":");
    BRS = atoi(c);
  }
  if (!strncmp(c, "AR", 2)) {
    int x = c[2] - 48;
    Serial.println(x);
    c = strtok(NULL, ":");
    AR[x - 1] = atoi(c);
  }
  if (!strncmp(c, "RZ", 2)) {
    int x = c[2] - 48;
    c = strtok(NULL, ",");
    RZvk[x - 1] = atoi(c);
    c = strtok(NULL, ",");
    RZnk[x - 1] = atoi(c);
  }
  if (!strncmp(c, "F", 1)) {
    int x = c[1] - 48;
    c = strtok(NULL, ":");
    strcpy(F[x - 1], c);
  }
  memset(buf, 0, 30);
}

void serMon()
{
  if (ausgabe == true)
  {
    ausgabe = false;
    Serial.print("BRZ");
    Serial.print(": ");
    Serial.print(BRZvk); Serial.print(" - "); Serial.println(BRZnk);
    Serial.print("BRF");
    Serial.print(": ");
    Serial.println(BRF);
    Serial.print("BRS");
    Serial.print(": ");
    Serial.println(BRS);
    for (int i = 0; i < fahrer; i++)
    {
      Serial.print("AR");
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.println (AR[i]);
      Serial.print("RZ");
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(RZvk[i]); Serial.print(" - "); Serial.println(RZnk[i]);
      Serial.print("F");
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.println(F[i]);
    }
  }
}

[/edit2]

// Umsetzung Daten einlesen
// Vorgaben:
const byte fahrer = 4;    // Anzahl Fahrer
const byte charName = 30; // Anzahl Stellen Fahrername 

// Bxx ist ein Datensatz
unsigned int BRZvk;       // Beste Rundenzeit Vorkomma
unsigned int BRZnk;       // Nachkomma
char BRF[charName];       // Fahrername
unsigned int BRS;

// AR - RZ - F werden mehrere Datensätze
unsigned int AR[fahrer];  // Runden des Fahrer
unsigned int RZvk[fahrer];// Rundenzeit Vorkomma des Fahrer
unsigned int RZnk[fahrer];// Rundenzeit Nachkomma
char F[fahrer][charName]; // Fahrername
// Ende Vorgaben Umsetzung Daten einlesen

bool ausgabe = false;     // Nur ausgeben wenn Änderung

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
}

void loop()
{
  delay(1000);
  readSerial();
  serMon();
}

void readSerial()
{
  const int breakTimeRead = 500; // Abbruchzeit in ms
  char readChar;                 // Einzelnes Zeichen
  byte x = 0;                    // Position im Array
  char buf[30] = "\0";           // Zwischenspeicher

  unsigned long lastmillis = millis(); // Startzeit merken...
  while (Serial.available() > 0 && millis() - lastmillis < breakTimeRead)
  {
    readChar = Serial.read();
    if (readChar == ';')
    {
      ausgabe = true;
      Serial.print("Teile "); Serial.println(buf);
      teileBuf(buf);
      x = 0;
    }
    else
    {
      buf[x] = readChar;
      x++;
    }
  }
}

// BRZ:6,777;BRF:Paul Mustermann;BRS:4;AR1:0;RZ1:0,000;F1:Friedhelm Busch;AR2:0;RZ2:0,000;F2:Max Jägermeister;AR3:0;RZ3:0,000;F3:Paul Mustermann;AR4:0;RZ4:0,000;F4:Thorsten Hesse;
void teileBuf(char *buf)
{
  char *c;
  c = strtok(buf, ":");
  if (!strncmp(c, "BRZ", 3)) {
    c = strtok(NULL, ",");
    BRZvk = atoi(c);
    c = strtok(NULL, ",");
    BRZnk = atoi(c);
  }
  if (!strncmp(c, "BRF", 3)) {
    c = strtok(NULL, ":");
    strcpy(BRF, c);
  }
  if (!strncmp(c, "BRS", 3)) {
    c = strtok(NULL, ":");
    BRS = atoi(c);
  }
  if (!strncmp(c, "AR1", 3)) {
    c = strtok(NULL, ":");
    AR[0] = atoi(c);
  }
  if (!strncmp(c, "RZ1", 3)) {
    c = strtok(NULL, ",");
    RZvk[0] = atoi(c);
    c = strtok(NULL, ",");
    RZnk[0] = atoi(c);
  }
  if (!strncmp(c, "F1", 2)) {
    c = strtok(NULL, ":");
    strcpy(F[0], c);
  }
  if (!strncmp(c, "AR2", 3)) {
    c = strtok(NULL, ":");
    AR[1] = atoi(c);
  }
  if (!strncmp(c, "RZ2", 3)) {
    c = strtok(NULL, ",");
    RZvk[1] = atoi(c);
    c = strtok(NULL, ",");
    RZnk[1] = atoi(c);
  }
  if (!strncmp(c, "F2", 2)) {
    c = strtok(NULL, ":");
    strcpy(F[1], c);
  }
  if (!strncmp(c, "AR3", 3)) {
    c = strtok(NULL, ":");
    AR[2] = atoi(c);
  }
  if (!strncmp(c, "RZ3", 3)) {
    c = strtok(NULL, ",");
    RZvk[2] = atoi(c);
    c = strtok(NULL, ",");
    RZnk[2] = atoi(c);
  }
  if (!strncmp(c, "F3", 2)) {
    c = strtok(NULL, ":");
    strcpy(F[2], c);
  }
  if (!strncmp(c, "AR4", 3)) {
    c = strtok(NULL, ":");
    AR[3] = atoi(c);
  }
  if (!strncmp(c, "RZ4", 3)) {
    c = strtok(NULL, ",");
    RZvk[3] = atoi(c);
    c = strtok(NULL, ",");
    RZnk[3] = atoi(c);
  }
  if (!strncmp(c, "F4", 2)) {
    c = strtok(NULL, ":");
    strcpy(F[3], c);
  }
  memset(buf, 0, 30);
}

void serMon()
{
  if (ausgabe == true)
  {
    ausgabe = false;
    Serial.print("BRZ");
    Serial.print(": ");
    Serial.print(BRZvk); Serial.print(" - "); Serial.println(BRZnk);
    Serial.print("BRF");
    Serial.print(": ");
    Serial.println(BRF);
    Serial.print("BRS");
    Serial.print(": ");
    Serial.println(BRS);
    for (int i = 0; i < fahrer; i++)
    {
      Serial.print("AR");
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.println (AR[i]);
      Serial.print("RZ");
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(RZvk[i]); Serial.print(" - "); Serial.println(RZnk[i]);
      Serial.print("F");
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.println(F[i]);
    }
  }
}

[edit]
Und so sieht die Ausgabe auf dem SerMon mit Deinem Teststring aus:

16:08:59.757 -> BRZ: 6 - 777
16:08:59.757 -> BRF: Paul Mustermann
16:08:59.757 -> BRS: 4
16:08:59.757 -> AR1: 0
16:08:59.757 -> RZ1: 0 - 0
16:08:59.757 -> F1: Friedhelm Busch
16:08:59.757 -> AR2: 0
16:08:59.757 -> RZ2: 0 - 0
16:08:59.757 -> F2: Max Jägermeister
16:08:59.757 -> AR3: 0
16:08:59.757 -> RZ3: 0 - 0
16:08:59.799 -> F3: Paul Mustermann
16:08:59.799 -> AR4: 0
16:08:59.799 -> RZ4: 0 - 0
16:08:59.799 -> F4: Thorsten Hesse