Forum: PC-Programmierung Serielle Kommunikation


von sven (Gast)


Lesenswert?

Hey kurze Frage.
Ich möchte gerne von einen anderen Programm (Matlab) Daten zum Arduino 
senden und diese dementsprechend auswerten. Also über Serielle 
Kommunikation

Die Daten würden so aussehen:

Winkel:1,8 Schritt:5 getUmdrehung();  ...und so weiter

also ich bekomme double, int, boolean, String  Werte oder besser gesagt 
einen Text zurück.
Jetzt kann ich zwar den String bei einem Charakter trennen jedoch würden 
die anderen Daten verloren gehen.
zusätzlich sollen auch Methoden aufgerufen werden können.

Hat jemand eine Idee wie man das unsetzten könnte?

: Verschoben durch User
von Georg (Gast)


Lesenswert?

sven schrieb:
> Hat jemand eine Idee wie man das unsetzten könnte?

Parsen.

Georg

von Felix U. (ubfx)


Lesenswert?

Wenn du die Funktionen auf dem Arduino ausführen willst: Die Funktionen 
mittels ihrer Namen zu übergeben kannst du dir schenken. Ein "richtiges" 
Call-By-Name zu implementieren wäre viel zu aufwendig. Du solltest sowas 
in der Art machen:

Func-ID;param_1;param_2;...;param_n;\r\n

Dann eine Zeile lesen, an ";" splitten, in einem switch-case statement 
die Funktionsnummer auswerten und dann an die entsprechende Funktion 
(nachdem du geprüft hast ob die Anzahl der Parameter stimmt) die Daten 
übergeben.

Wenn du die Funktionen in Matlab ausführen willst, ist es ja kein 
Problem, weil du da Call-By-Name nutzen kannst.

Beispiele für die Benutzung des seriellen Ports unter Matlab findest du 
hier: 
https://de.mathworks.com/help/matlab/matlab_external/getting-started-with-serial-i-o.html

: Bearbeitet durch User
von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich benutze in solchenFällen immer ein Datenformat mit fester Länge, 
z.B. "<CMD:DAT1:DAT2>" oder so ähnlich.

Jedes Empfangene Zeichen schiebe ich in ein Array fester Länge (das 
älteste fällt raus) und prüfe, ob im ersten und letzten Feldelement die 
Start- und Stopp-Zeichen (z.B. "<" und ">") erkannt werden.

Wenn ja, führe ich die zugehörige Funktion aus, das Array leere ich in 
jedem Falle. Die Erkennung bestätige ich mit einem "<OK>" zum Sender. 
Kommt das zu lange nicht, werden die Daten nochmal gesendet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.