Serielle Kommunikation

Gast #5075492
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?
#5075774
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
(Firma: Q3) #5077856
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren