1

ジョイスティック入力のステータスを定期的にチェックする GUI を matlab で作成しようとしています。アイデアは、この入力を取り、それでサーボを制御することです。これまでのところ、すべてを個別に動作させることはできますが、一緒にすることはできません。現在、マイクロコントローラーはシリアルラインを見て、これに基づいてサーボ (0 から 180 の間) を調整するようにセットアップされています。これはうまくいきます。ここに私がこれまでに持っているものがあります、

function Foo

h.fig = figure('position', [1100 30 210 60]);
h.serial = serial('COM3');
fopen(h.serial);
h.joy = vrjoystick(1);
h.timerObject = timer('TimerFcn',@JoyInput,'ExecutionMode','fixedRate',...
                    'Period',1.0);

h.buttonOne = uicontrol('style', 'pushbutton' ,...
                'position', [10 10 100 40],...
                'string' , 'Start');

set(h.buttonOne, 'callback', {@Start, h})

function h = Start(hObject, eventdata, h)
h.buttonTwo = uicontrol('style', 'pushbutton' ,...
                'position', [100 10 100 40],...
                'string' , 'Stop');
set(h.buttonTwo, 'callback', {@Stop, h});
set(h.buttonOne, 'enable', 'off');
start(h.timerObject);
%fprintf(h.serial,'150') This works as is


function h = Stop(hObject, eventdata, h)

delete(h.buttonTwo)
h = rmfield(h, 'buttonTwo');
set(h.buttonOne, 'enable', 'on');
stop(h.timerObject);
fclose(h.serial);
delete(h.serial);

function h=JoyInput(hObject, eventdata, h)
fprintf(h.serial,'150') %doesn't work
% a = 1 % this repetively outputs a=1 without the fprintf

というエラーが表示されます

??? Error while evaluating TimerFcn for timer 'timer-17' 

Input argument "h" is undefined. 

私は matlab で gui を使用するのが初めてで、他のコールバック関数の他の場所で h.serial を使用できる場合、これが何を意味するのか途方に暮れています。ご協力ありがとうございました!

4

1 に答える 1

0

ポーリング (定期的に変更をチェックする) よりも、イベント駆動型のアプローチの方がうまくいく可能性があります。インスピレーションを得るためのファイル交換のコード例については、次のリンクを参照してください。このコードは、ハードウェアの 3D マウス ビットとのインターフェイスに使用されますが、一般的なアプローチが非常に役立つ場合があります。

http://www.mathworks.com/matlabcentral/fileexchange/22124-3d-mouse-support-using-classes-and-events

于 2012-05-18T08:05:22.240 に答える