Je nach Schlüsselwort führe ich unterschiedliche Funktionen (voids) aus. Ist es möglich eine Funktion durch eingeben des Funktionsnamen auszuführen? Würde beuteten ich hätte z.B. folgende Funktion:
Schließe Deine Eingabe mit '\n' (Zeilenvorschub) ab, dann weißt Du, wann sie zu Ende ist. Bis dahin liest Du die Zeichen ein.
Du schreibst nicht, was Du für einen Arduino benutzt. Wenn der nicht sehr viel RAM hat, dann lass die Finger von den Strings und benutze Char-Arrays. Infos dazu gibt es z.B. hier.
Routinen, wie Du das einliest gibt es hier im Forum genügend.
magie004:
Hallo Zusammen,
ich frage aktuell meine Serielle Schnittstelle wie folgt ab:
void ReadSerialCommands() {
String Command;
while (Serial.available() > 0) {
Command += (char) Serial.read();
delay(5);
if (Command == "Schlüsselwort") {
//Aktion
}
Je nach Schlüsselwort führe ich unterschiedliche Funktionen (voids) aus. Ist es möglich eine Funktion durch eingeben des Funktionsnamen auszuführen?
Nein, die Funktionsnamen stehen zur Laufzeit des Programms nicht mehr zur Verfügung.
Allerdings kannst Du Funktionen über die Funktionsadressen im Programm aufrufen (Funktionszeiger).
Du kannst daher folgendes machen und zwei Arrays mit Konstanten definieren:
ein Array mit den ganzen Schlüsselwörtern, die Du als Kommandos verwenden möchtest
-ein Array mit Funktionszeigern auf die Funktionen, die bei Eingabe eines Schlüsselworts ausgeführt werden sollen
Zur Laufzeit könntest Du dann nach eingegebenen Schlüsselwörtern Ausschau halten und jeweils die einem Schlüsselwort zugeordnete Funktion aufrufen.
Das ist kein Problem, wenn man mit Funktionszeigern umgehen kann und erfordert eine einzige for-Schleife.
Das wäre für mich kein Problem.
Wenn Du möchtest, kann ich mir ein kleines Beispielprogramm einfallen lassen und Dir hier als Anschauungsobjekt posten.
jurs:
... kann ich mir ein kleines Beispielprogramm einfallen lassen und Dir hier als Anschauungsobjekt posten.
Ich bin auf jeden Fall an einem kurzen Beispiel interessiert. Mich betrifft das Problem aktuell zwar nicht, aber es ist interessant und ein Thread mit Beispiel würde sofort in meiner Linksammlung landen.
Schönes Beispielprogramm!
Aber aufpassen, dass im seriellen Monitor das richtige Zeilenende-Zeichen gesetzt ist, weil in Whandalls Code am Ende des Kommandos auf Carriage Return (ASCI-13)geprüft wird:
inChar = Serial.read();
if (inChar == 13) {
Falls auf der PC-Seite nicht der serielle Monitor läuft, sondern ein serielles Terminalemulationsprogramm zur Eingabe von Kommandos verwendet wird,, dann am Ende des Kommandos einfach die Return- oder Enter-Taste drücken, das funktioniert auch mit jedem Terminalprogramm.