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