Hallo!
Hm, also so ganz optimal ist Dein Ansatz für meinen Geschmack eher nicht. Natürlich kannst Du die Daten in einem Loop abholen - Du könntest aber auch einen Callback machen, der jedesmal aufgrufen wird, wenn das serial Objekt Daten für Dich hat. Dann wird das Timing durch die einlaufenden Daten bestimmt und du müsstest nicht "pause" verwenden. Aber gut, kannst ja ggf mal ändern, erstmal mag es so gehen. Was man aber auf jeden Fall vermeiden sollte - insb wenn du alle 65 ms lesen willst - ist für jeden Lesevorgang die Schnittstelle auf- und wieder zuzumachen. Mach vor dem Loop einmal die Schnittstelle auf und danach, wenn das Programm beendet wird, wieder zu. Das eigentliche Plotten würde ich dann so machen, wie weiter oben schon beschrieben. Du legst Dir ein Vektor für Deine Daten (zB 500 Punkte) an und initialisiert ihn zB mit Nullen:
Code:
vals = zeros(500, 1);
Dann plottest Du den Vektor einmal und lässt Dir das Handle von dem plot (hier nennen wir es h1) zurückgeben:
jetzt kommt ein kleiner Trick. Mit
Code:
set(h1, 'YDataSource', 'vals')
sorgst Du dafür, dass Du in Deinem Loop die Daten des Diagramms einfach updaten kannst. Das o.g. führst Du also einmal vor Deinem Hauptloop aus. Für den Loop übernehm ich mal Deine Art des Auslesens - auch wenn man da vielleicht noch einiges verbessern kann.
Code:
while run
fwrite(com, 'SE00051P', 'uint8');
pause(0.065);
fwrite(com, 'SE103P', 'uint8');
A = fscanf(com)
A_b = regexp(A,' ','split');
Distanz = hex2dec([A_b{2} A_b{3}])
vals(2:500) = vals(1:499);
vals(1) = Distanz;
refreshdata(h1, 'caller')
end
So müsste es in etwa gehen.
Gruß
Malte
Lesezeichen