我正在尝试在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
'用户'传递到连续的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循环中,我无法弄清楚如何更新用户。
如果有人对如何使其发挥作用有任何想法,请告诉我。我非常感谢任何帮助。只要满足上述目标,我愿意改变结构。
罗伯特
答案 0 :(得分:0)
要更新用户变量,您需要确保已正确加载。在没有输出的情况下调用load
并不总是将变量加载到函数工作区中。
您需要将文件作为结构加载,然后从结构中检索变量,而不是load('user.mat');
。要完成此任务,请执行以下操作:
s=load('user.mat');
user=s.user;