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 回答