Ein Array soll über die Eingabe entsprechender Daten mit sinnvollen Werten befüllt werden.
Ein beispielhaft zu erwartender Befehl lautet z.B. "prio14,3,2,5".
Die zu beschreibende Anzahl der Index soll sich hierbei nach der Anzahl der eingegebenen Daten richten.
Nun zu meinem Problem:
Sobald ab Index 2 eine Null eingegeben wurde soll nur dann die Funktion prio() nicht aufgerufen werden, wenn im Anschluss weitere Zahlen größer als Null eingegeben wurden.
Ein fehlerfhafter Befehl wäre somit z.B. "prio14,3,0,5".
Wie könnte ich den Code aus Eurer Sicht modifizieren/verbessern?
Mit einem einfachen break; scheine ich hier nicht weiterzukommen.
Gruß Chris
char* parseString(char* serialBuffer) //String verarbeiten
{
if (strstr(serialBuffer, "prio") == serialBuffer &&
getIntFromString(serialBuffer, 1) != 0 &&
getIntFromString(serialBuffer, 1) <= 30 &&
getIntFromString(serialBuffer, 2) != 0 &&
getIntFromString(serialBuffer, 2) <= 8)
{
Serial.println("prio");
byte prioInput[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
byte j = 1;
for (byte i = 0; i <= 8; i++)
{
j = getIntFromString(serialBuffer, i + 1);
prioInput[i] = j;
}
prio(prioInput);
}
else if (strcmp(serialBuffer, "") != 0)
{
Serial.print("\"");
Serial.print(serialBuffer);
Serial.println("\" ist ein unbekanntes Kommando.");
}
}
int getIntFromString (char *stringWithInt, byte num) // Zieht der Reihe nach einzelne Integer aus dem String
// input: pointer to a char array
// returns an integer number from the string (positive numbers only!)
// num=1, returns 1st number from the string
// num=2, returns 2nd number from the string, and so on
{
char *tail;
while (num > 0)
{
num--;
while ((!isdigit (*stringWithInt)) && (*stringWithInt != 0)) stringWithInt++; // skip non-digits
tail = stringWithInt;
while ((isdigit(*tail)) && (*tail != 0)) tail++; // find digits
if (num > 0) stringWithInt = tail; // new search string is the string after that number
}
return (strtol(stringWithInt, &tail, 0));
}