我正在做一个关于电梯模拟的项目,遇到了这个问题。我有一个listbox
供用户选择他们想去的楼层,但我不知道如何使电梯门按正确的顺序打开。
例如,第一个人想去1楼,第二个人想去3楼。他们会先选择1,然后选择3,但当我这样做时,Matlab总是先打开3层,然后打开1层。
我正在考虑将列表框的值存储在矩阵中,然后使用for
循环根据楼层以正确的顺序打开电梯门。
这是我项目的GUI。GUI
在listbox1_Callback
。我尝试过这样做,但是我的数组只有一个元素。
A = [];
listValue = get(handles.listbox1,'Value');
A = [A,listValue];
我希望A保存一系列值,这样我就可以将foor循环应用于A并逐元素执行。
谢谢你的帮助。
例如,假设您有一个名为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
您的项目可能已经结束,但我仍然会贡献一些东西。不是关于编程代码本身,而是关于电梯原理,这可能有助于你和其他人下次正确构思系统。
当驾驶室位于或非常靠近(典型地<8cm)特定楼层时,电梯门仅在该楼层打开。原因很简单:打开车门的电机和机构在驾驶室上。层门实际上是由驾驶室门移动的,使用带有溜冰鞋和捡拾滚轮的离合器。因此,在您的程序中,您必须关注的是驾驶室的位置,这是一个从一个楼层到另一个楼层依次移动的简单对象。
所以,当电话被登记时,你必须将它们与出租车的位置进行比较。然后你决定走哪条路,向上还是向下(或者如果位置已经合适,就把门打开)。你保持一个首选方向,直到你接到最远的电话,然后你改变方向或等待新的电话。只需在实际位置上加1或减1(每次操作之间间隔几秒钟,使其看起来真实),将位置与调用数组的相应索引进行比较,然后决定停止并打开门(如果存在调用)或继续(如果不存在调用)。别忘了在四肢停下来,即使出于某种原因没有电话。
如果你想在组合中引入落地呼叫,你必须考虑它们是上行呼叫还是下行呼叫。上行时只停靠上行呼叫,下行时只停靠下行呼叫。