我正在做一个关于模拟电梯的项目,遇到了这个问题。我有一个listbox,用户可以选择他们想去的楼层,但我不知道如何让电梯的门按正确的顺序打开。
例如,第一个人想去一楼,第二个人想去三楼。他们会先选择1,然后选择3,但当我这样做时,Matlab总是先打开3楼,然后再打开1楼。
我正在考虑将列表框的值存储在一个矩阵中,然后使用for循环以正确的顺序根据楼层打开电梯的门。
这是我的项目的GUI。GUI
在listbox1_Callback下。我试着这样做,但我的数组只有一个元素。
A = [];
listValue = get(handles.listbox1,'Value');
A = [A,listValue];我想让A保存一个值序列,这样我就可以将foor循环应用于A,并逐个元素地执行。
谢谢你的帮助。
发布于 2015-11-29 14:46:01
例如,假设您有一个名为open的函数,该函数接受一个参数,即楼层编号,并打开该楼层的电梯门。要循环遍历每个选定的楼层,请执行以下操作:
handles.listbox1 = uicontrol('Style', 'listbox', ...
'String', [1 2 3 4], ...
'Position', [10 10 40 100], ...
'Max', 2);
selectedFloor = get(handles.listbox1, 'Value');
for ii = 1:length(selectedFloor)
open(selectedFloor(ii));
end发布于 2016-03-21 10:11:33
你的项目可能已经结束了,但我还是会贡献一些东西。不是关于编程代码本身,而是关于电梯原理,这可能有助于您和其他人下一次正确地构思系统。
只有当驾驶室在某一特定楼层或离该楼层非常近(通常小于8厘米)时,电梯门才会打开。原因很简单:打开车门的电机和机械装置在驾驶室上。起落架门实际上是由驾驶室门移动的,使用带有溜冰鞋和皮卡滚轮的离合器。因此,在您的程序中必须关注的是驾驶室的位置,这是一个简单的对象,它按顺序从一个楼层移动到另一个楼层。
因此,当呼叫被注册时,你必须将它们与驾驶室的位置进行比较。然后你决定走哪条路,向上还是向下(或者如果位置已经正确,就直接打开门)。您保持首选方向,直到到达最远的呼叫,然后更改方向或等待新的呼叫。只需从实际位置加或减1(每个操作之间间隔几秒钟,以使其看起来真实),将该位置与调用数组的相应索引进行比较,然后决定停止并打开门(如果存在调用)或继续(如果不存在调用)。即使由于某些原因不存在呼叫,也不要忘记在末端停止。
如果您想在混合中引入着陆呼叫,则必须考虑它们是向上呼叫还是向下呼叫。你只在上行时停止上行呼叫,在下行时只停止下行呼叫。
https://stackoverflow.com/questions/33978347
复制相似问题