Nein, die Parameter fangen nicht immer mit LA.. an.
Die Anzahl der Zeichen ist auf Maximal 40 beschränkt.
Darin sind auch das Trennzeichen "," und "\0" enthalten.
Ich denke das es mit einem Array das an eine Funktion übergeben wird funktionieren sollte.
Bin aber noch am suchen im I-Net.
Naja, im einfachsten Fall könntest Du ein char[]-Puffer mit 40 Zeichen anlegen und eine int-variable für die Position im Puffer.
Wenn dann was am seriellen Port anliegt liest Du das an die nächste freie Stelle im Puffer (z.B. mit "buffer[bufferpos++]=serial.read()" oder so ähnlich).
Wenn dann eine "\0" gelesen wird bist Du am Ende Deines Befehls angelangt und kannst mit der Verarbeitung beginnen.
Vergiss dabei nicht, die Pufferposition zurückzusetzen!
Dazu würde ich den Puffer durchgehen und nach den Kommas suchen...
A la "if (buffer[t]==',') " oder so.
Und dann kannst Du an den entsprechenden Stellen mit "atoi" ansetzen und die Zahlen-Zeichen in echte Zahlen umwandeln.
Oder was in der Art...
Wenn Du mal genau aufschreiben würdest, welche Werte die einzelnen Inhalte annehmen können und was sie bewirken sollen (vor allem die Buchstabenkomponenten), könnte man etwas konkreter werden...
so, ich habe da was gefunden verstehe es aber noch nicht 100% was da abläuft. (bin immer noch "C" anfänger !).
Ich habe den code auch ausprobiert, funktioniert soweit
Aber ich würde ihn auch gerne verstehen.
Vielleicht könnte jemand die // ? auflösen.
Funktioniert aber auch wirklich nur mit Kleinbuchstaben! Absicht?
wert = i = 0; // ?
Setzt den Wert von "wert" bei jedem eingegebenen Zeichen zurück. Damit können nur Werte bis maximal "9" erreicht werden! Besser das nur ein Mal in der "init" machen und ansonsten zurücksetzen, wenn ein Wert verarbeitet wird...
Input(Serial.read()); // Zeichen von usb an die Input funktion
Funktionen werden in der Regel klein geschrieben, nur Objektklassen schreibt man vorne groß. Und Konstanten komplett groß.
auf "} else if ('a' <= c && c <='z') { // ?" und " case 'f': " würde ich auch verzichten, und gleich nach der Parameter Eingabe die Funktion test ausführen.
Aber wie mach ich das ?
Kommentiere ich das aus funktioniert der code nicht.
Was macht eigentlich die Multiplikation mit 256 in test(256 * eingabe[0], eingabe[1], wert); ?
"... Damit können nur Werte bis maximal "9" erreicht werden! Besser das nur ein Mal in der "init" machen und ansonsten zurücksetzen, wenn ein Wert verarbeitet wird..."
byte wert;
int welche;
int zahl[4];
void test() {
// Hier kommt man nur rein, wenn eine Zeile zu Ende ist,
// dann sollte ein kompletter Datensatz empfangen worden sein.
// Die vier empfangenen Zahlen stehen dann in "zahl[0]", "zahl[1]", "zahl[2]" und "zahl[3]".
}
void input (char c) {
if ('0' <= c && c <= '9') {
wert = 10 * wert + c - '0';
} else if (c == ',' || c == '\0') {
zahl[welche++] = wert;
wert = 0; // zuruecksetzen
if (c == '\0') { // Zeilenende
welche = 0; // Naechstes Mal wieder vorne im Array anfangen
test(); // Und die Verarbeitungsfunktion aufrufen...
}
} else {
// Hier kommt er rein, wenn ein Buchstabe dran ist.
// Was dann zu Tun ist kommt drauf an was Du machen willst und welche Werte kommen koennen.
}
}
void init() {
wert = welche = 0; // Setzt alle Variablen auf einen definierten Startwert
}
void loop() {
if (Serial.available())
input(Serial.read()); // Zeichen von USB an die input-Funktion uebergeben
}
Ist aber ein Schnellschuss in nem Texteditor, kann das hier in der Firma nicht compilieren.
Und um das zu verfeinern müsste man wirklich wissen, was Du da für Werte bekommen kannst und was Du damit anfangen willst...