Klaro, hier ist der Code...:
Code:clc clear try rmappdata(0,'A'); rmappdata(0,'B'); %rmappdata(0,'C'); catch end s = serial('COM5','BaudRate',115200); fopen(s); s.BytesAvailableFcnMode = 'terminator'; disp('Ready...') s.BytesAvailableFcn = @empfangen3D; figure; [x,y] = meshgrid(-50:50:50,-50:50:50); z=[1 1 1; 0 0.1 0; -1 0 0]; h=surface(x,y,z); axis equal; xlim([-50 50]) ylim([-50 50]) zlim([-50 50]) view(0,30) setappdata(0,'h',h); %setappdata(0,'z',z);Wie man evtl. sieht ist das keine echte 3D Rotation. Aber mein Tricopter gibt auch keinen echten Winkel aus. Mal sehen ob ich das irgendwann noch ändere...Code:function empfangen3D (s, event) h=getappdata(0,'h'); A=getappdata(0,'A'); B=getappdata(0,'B'); %C=getappdata(0,'C'); %z=getappdata(0,'z'); try string=fscanf(s); k = strfind(string, 'A'); fff = strfind(string, 'B'); %zzz = strfind(string, 'C'); if k==1 A=str2num(string(2:end)); k=0; end if fff==1 B=str2num(string(2:end)); fff=0; end %if zzz==1 % C=str2num(string(2:end)); % zzz=0; %end z=[-A+B -A -A-B; 0+B 0 0-B; A+B A A-B]; catch disp('error reading from serial...'); fclose(s) end setappdata (0,'A',A); setappdata (0,'B',B); %setappdata (0,'C',C); %setappdata (0,'z',z); try %ist die Figure geshclossen worden... %wohl zu viel code für diesen "interrupt"... set(h, 'zdata',z) axis equal; xlim([-50 50]) ylim([-50 50]) zlim([-50 50]) %view(C,30) drawnow; catch fclose(s) %...dann wird serialport auch geschlossen. disp('...something went wrong or figure was closed.....') end end
Goran, hast du eine Idee wie man den Code optimieren könnte? Im Moment macht das BytesAvailable Callback die ganze Arbeit, dabei soll es doch eigentlich nur die Daten vom Serialport abholen. Man müsste eine weitere Function einbauen, die nur das zeichnen übernimmt. Wie das geht weiss ich aber nicht.... Müsste eine Function sein, die z.B. alle 1/25 sekunden aus den vorhandenen Daten den Plot updated.
Denn es gibt Probleme wenn ich mehrere Datensätze übertrage, ich glaube das Callback ist dann überlastet.
edit:
mein µC sendet:
"A123" --> Nick
"B345" --> Roll







Zitieren

Lesezeichen