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