0

複数のサーボ モーターに対して、MATLABでフィードバック制御プログラムを使用してサーボ モーターを実装しようとしています。目的は、サーボのアナログ出力を読み取り、スライダー バーからのユーザー値と比較し、新しい位置をサーボに書き込み、アナログ出力の書き込みまたは監視を続行して、サーボが最後のユーザー値を維持していることを確認することです。バックグラウンドでwhileループが実行されている間、常に GUI を開いたままにし、ユーザー値を受け入れるための最適なフローを理解できないため、問題が発生しています。以下は、コードに出力させたい一般的な構造です。

test_gui %calls GUI figure with slider bar

スライダーバー付きの GUI ウィンドウがポップアップします

%Callback for when user slides bar
function slider(i)_Callback(hObject, eventdata, handles)
 % hObject    handle to slider1 (see GCBO)

 load('user.mat'); %Load previous user input
 sze=size(user,1);
 user(sze+1,1)=get(hObject,'Value'); %Add new user input to previous input
 save('user.mat','user') %Save variable to be accessed by outer loop

'user' は、サーボ位置を書き込む連続 while ループに渡されます

while user ~= 'c'  %Continue to run until close window callback

 load('user.mat'); %load user input from callback

 Write_Servoi(a,user(end,:),add,speed,pinin,myServo) %Writes to servo(s) based on last input, allows servo(s) to maintain position if torqued out of position

end

この while ループの間、ユーザーがスライダーを継続的に変更し、このスライダーの値を while ループに送信してサーボに書き込むことができるようにしたいと考えています。ただし、 while ループのときにユーザーを更新する方法がわかりません。

これを機能させる方法について誰かがアイデアを持っている場合は、私に知らせてください。助けていただければ幸いです。上記の目的が満たされる限り、私は構造を変更することにオープンです。

ロバート

4

1 に答える 1

0

ユーザー変数を更新するには、適切にロードされていることを確認する必要があります。出力なしで呼び出すloadと、常に変数が関数ワークスペースに読み込まれるとは限りません。

の代わりにload('user.mat');、ファイルを構造体としてロードし、構造体から変数を取得する必要があります。これを行うには、次の手順を実行します。

s=load('user.mat'); user=s.user;

于 2016-02-17T17:03:06.083 に答える