Chris72622:
Mich verwirrt, dass viele "Befehle" in einer Programmiersprache geschrieben sind, die ich nicht in Einklang bringen kann mit dem, was ich in den Büchern über reine Arduinoprogrammierung bisher gelernt habe (z.B. "memset" oder "strstr").
Deine Bücher "über reine Arduinoprogrammierung" sind nicht das allein Seeligmachende für die C-Programmierung von AVR-Mikrocontrollern.
Arduino ist in erster Linie eine GCC-Entwicklungsumgebung mit vollständigen AVR-libc Libraries, die vollständig vorinstalliert sind. Plus einen kleinen Fliegenschiss an Arduino-spezifischen Erweiterungen bei Preprocessing und Arduino-Libraryerweiterungen.
Zum Programmieren unter Arduino steht Dir die gesamte AVR libc zur Verfügung:
http://www.nongnu.org/avr-libc/
Library Reference: avr-libc: Modules
Mit allen Stringbearbeitungsfunktionen: avr-libc: <string.h>: Strings
Die Links poste ich mal, falls Du nachschlagen möchtest, welche Befehle Dir zum Programmieren zur Verfügung stehen. Wie Du die verwendest, kannst Du auch auf anderen Seiten über C und C++ Programmierung googeln, wenn sie Dir nichts sagen.
Im Gegensatz dazu, dass manche meinen, Arduino wäre ein Mikrocontrollersystem, das sich an Leute mit null Vorkenntnissen wendet, ist Arduino tatsächlich ein Mikrocontrollersystem, das sich zuerst an C/C++-Programmier mit soliden Programmierkenntnissen wendet.
Chris72622:
Da ich ohne delay() arbeiten möchte, da ich noch anderen Code abzuarbeiten habe, wäre mir die "Funktionsvariante" viel lieber, doch mit dem Umbauen haperts ganz gewaltig.
Das sind Beispiele mit wenigen Codezeilen für interaktive Programme. Die darin enthaltenen 100ms Delay liegen unterhalb der Reaktionszeiten eines Menschen. Wenn Du nicht-interaktive Programme machst, die in den 100ms, die der Beispielcode wartet, noch tausend andere Dinge erledigen müssen, kannst Du die Kommandos natürlich auch ohne Delay einsammeln, dann wird der Code und die Programmlogik ein paar Zeilen länger.
Chris72622:
In meinem Fall würde es aureichen auf Zeichenfolgen zu prüfen (wie "CONNECT" bei dem Kollegen, bloß inkl. Leerzeichen- z.B. "Z 3 0 1").
Also eine loop die gleichzeitig kurze Kommandos von der seriellen Schnittstelle sammelt und ohne delay andere Dinge erledigen kann während die seriellen Zeichen eintrudeln. Da würde ich mir keine grossen Gedanken über einen eigenen Empfangs-Ringpuffer machen, das ist vergebliche Mühe, denn der serielle Empfangspuffer beim Arduino ist ja bereits vorhanden, ich glaube mit 64 Bytes Pufferspeicher. Da braucht man die Zeichen nur rausziehen und auf die Kommandos abscannen, genau wie in den zwei von mir geposteten Beispielen. Bzw. mit den ganzen Zahlen als Modifikator eines Kommandos dann das zweite Beispiel mit der "CONNECT" Auswertung.
Chris72622:
Das sich aus meiner Sicht bei Beiden von Dir verlinkten Codeschnipseln der Buffer innerhalb der setup loop() befindet, kann ich das Ganze nun leider nicht in Einklang mit bisher von Dir "vorgeschlagenen" Funktionsvariante bringen.
Da schaue bitte nochmal genau hin!
Im CONNECT-Beispiel http://arduino.cc/forum/index.php/topic,137669.0.html wird in setup() nur die serielle Schnittstelle initialisiert, es gibt eine saugeniale Funktion getIntFromString zum Rausziehen von Zahlenwerten aus einem String, die von überall im Sketch verwendet werden kann, und es gibt eine loop(), in der Kommandos laufend ausgewertet werden und die darauf reagiert, dass bestimmte Kommandos kommen.
Das ist der Ansatz als Vorlage, wo Du nur noch das delay() durch eine andere Programmlogik ersetzen müßtest, und dann könntest Du auch Kommandos wie z.B. "Z 3 0 1" damit erkennen und darauf reagieren.