Verfasst am: 16.02.2016, 11:53
Titel: BytesAvailable leert Buffer nicht komplett
Hallo Zusammen,
ich habe eine GUI programmiert die Daten von einem Arduino liest, der per USB angeschlossen ist. Der Arduino sendet immer 8 Bytes - Datenpakete.
Sobald mindestens 8 Bytes im Buffer vorhanden sind, werden 8 Bytes aus dem Buffer gelesen.
Das funktioniert auch meistens. Aber manchmal, wenn viele Daten in kurzer Zeit vom Arduino gesendet werden, bleiben Daten im Buffer übrig.
in der Funktion mycallback werden die Daten gelesen. Die 8 Bytes beginnen mit "35" und hören mit "10" auf.
Code:
function mycallback(obj,event,hObject)
inByte = zeros(1 ,8);
inByte(1) = fread(obj,1,'char');
if inByte(1) == 35 %Kontrolle ob Startzeichen eingelesen wurde
inByte(2:8) = fread(obj,7,'char');
if inByte(8) == 10 %Kontrolle ob eingelesene Werte mit Endzeichen aufhören
Wenn viele Daten vom Arduino gesendet werden, sind manchmal noch Daten im Buffer vorhanden und die Funktion mycallback wird trotzdem nicht aufgerufen. Wenn ich manuell mit fread den Buffer auslese, werden noch Daten empfangen (mehr als 8 Byte)
Ich verstehe nicht, weshalb die Funktion mycallback nicht aufgerufen wird.
Wäre super wenn mir hier jemand nen Tipp geben kann, woran es liegen könnte.
Möglicherweise werden während der Abarbeitung der BytesAvailableFcn neue Daten gesendet. Die sind dann natürlich noch im Buffer.
Ich habe aber keine Erfahrung damit, wie man das abfängt. Vielleicht hilft es die BytesAvailableFcnMode auf 'byte' zu setzen?
Der BytesAvailableFcnMode ist bereits auf 'byte' gesetzt. Es kann sehr gut sein, dass während der Abarbeitung der BytesAvailableFcn neue Daten gesendet werden. Sollte die BytesAvailableFcn dann nicht erneut ausgelöst werden? Oder wird die BytesAvailableFcn nur ausgelöst wenn neue Daten in den Buffer geladen werden?
Gruß
Alex
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.