Tugas Perancangan :
Problem :
Buat simulasi 4 lift yang digunakan untuk melayani gedung 20 lantai dengan ketinggian lantai 3 m.
Menggunakan software Matlab. Kapasitas lift 15 orang, kapasitas lantai gedung 200 orang / lantai dan
setiap lift diasumsikan menggunakan daya sebesar 10 kW. Factor yang dinilai adalah efektivitas dan
keamanan lift.
Analisis :
Untuk merancang simulasi ini ditetapkan asumsi-asumsi sebagai berikut :
Status dari lift dibuat dalam bentuk matrix untuk mempermudah menyimpan data serta
menganalisis posisi dan permintaan penumpang. Permintaan penumpang dimasukkan sebagai input,
dimana untuk calon penumpang dapat menginput tujuannya apakah akan naik atau turun, setelah
masuk ke dalam lift, baru dapat menentukan tujuan spesifik serta lantai yang dituju.
Pada lantai 1 hanya terdapat tombol naik, sedangkan pada lantai 20 hanya terdapat tombol turun.
Jika penumpang yang ada di dalam lift menginput lebih dari lantai 20 tidak akan dilayani.
Pemilihan lift yang melayani penumpang adalah lift yang terdekat dari lantai penumpang atau
dengan selisih lantai terkecil. Sehingga efisien dimana lift tidak akan butuh terlalu banyak daya listrik
karena melayani penumpang yang terdekat dengannya.
Simulasi disajikan dalam bentuk GUI sehingga mudah dioperasikan, dan perjalanan setiap lift
dapat dipantau dengan mudah.
Namun simulasi ini masih memiliki kekurangan, yaitu belum bisa mensimulasikan keinginan dari
penumpang sebelumnya, seharusnya lebih efisien jika pada satu lift banyak penumpang dengan tujuan
lantai sama, maka penumpang yang meminta dari lantai tujuan tersebut dilayani lebih dulu, sehingga
pergerakkan lift makin efisien.
Serta belum menggambarkan adanya daya start yang besarnya bisa mencapai 5 kali daya nominal,
sehingga seharusnya dengan bisa mengambarkan model ini efisiensi dapat diperbesar.
Selain itu simulator ini belum bisa menghitung energi rata-rata yang digunakan untuk proses
mobilisasi lift.
Rating motor lift adalah 10 kW maka besar arus starting kira kira sebesar 5 kali nomina l. Akibatnya daya
start mencapai 5 kali daya nominal atau 50 kJ
Jika berat pengguna diasumsikan sama 70 kg maka untuk menaikan atau menurunkan pengguna dengan
jarak 3 meter (jarak tiap lantai) akan dibutuhkan energy sebesar 2,1 kJ. Sehingga energi akibat adanya
penumpan pada lift tergantung jumlah penumpang, yaitu jumlah penumpang x 2,1 kJ
Energi yang dihitung/dikeluarkan oleh lift adalah energi total yang merupaka jumlah total semua
energi diatas.
Source code :
% Khaerul Anwar
% 13207175
% Institute Technology of Bandung
% October 30th, 2010
% if there are something wrong, please email me on
% anwar.khaerul@gmail.com
%% Elevator Model
% variabel dan konstanta
waktu = 1.5;
% kecepatan lift pindah satu lantai / buka-tutup pintu)
npenum = 2;
% jumlah orang tiap masuk lift
elift = zeros(20,4);
% container real semua lift
% merupakan matriks [20 x 4] yang berisi nilai 1 atau 0
% nilai: 1 = isi, 0 = kosong
estate = zeros(4,4);
% Matriks keadaan semua lift
% merupakan matriks [4 x 4] yang berisi informasi sebagai berikut :
% baris 1: state lift (0: idle, 1: naik, 2: turun)
% baris 2: posisi lift (range: 1 - 20)
% baris 3: jumlah orang di lift
% baris 4: sedang membuka pintu atau tidak (0: tutup, 1 : buka)
eantnaik = zeros(20,4);
% matriks antrian naik untuk semua lift
% berupa matriks [20 x 4] yang berisi antrian lantai yang akan
% dilewati oleh lift
eantturun = zeros(20,4);
% matriks antrian turun untuk semua lift
% berupa matriks [20 x 4] yang berisi antrian lantai yang akan
% dilewati oleh lift
etunggu = zeros(1,4);
% matriks tunggu lift (0 = tidak, 1 = tunggu)
% hanya digunakan pada state idle
lanjut = true;
% true = bergerak (iterasi while do)
% false = paused (tidak ada yg diproses)
for a=1:4,
estate(1,a) = 0;
estate(2,a) = 1;
estate(3,a) = 0;
estate(4,a) = 0;
elift(1,a) = 1;
etunggu(1,a) = 0;
end
%% FUNCTIONS
%% Fungsi Dasar
end
end
end
function NaikN (lidx, N)
% fungsi naik N lantai
for i=1:N
Naik(lidx);
end
end
function Turun (lidx)
% fungsi turun satu lantai
% lidx adalah nomor lift
if (lidx > 4)
msgbox('melebihi jumlah lift','error');
else
x = 0;
for i=1:20
if (elift(i,lidx) == 1)
x = i;
end
end
x = estate(2,lidx);
if (x == 0)
elseif (x > 1)
elift(x,lidx) = 0;
elift(x - 1,lidx) = 1;
estate(2,lidx) = x - 1;
else
msgbox('sudah lantai bawah max, tidak bisa turun','=.=');
end
end
end
function TurunN (lidx, N)
% fungsi turun N lantai
for i=1:N
Turun(lidx);
end
end
function Naik1(lidx)
% satu eksekusi pada state Naik
if (estate(4,lidx) == 1)
% masukkan orang, tutup pintu
estate(4,lidx) = 0;
estate(3,lidx) = estate(3,lidx) + npenum;
else
if (eantnaik(1,lidx) == estate(2,lidx))
% berhenti, buka pintu, orang turun
% pop antrian eantnaik
estate(4,lidx) = 1;
if (estate(3,lidx) > 0)
estate(3,lidx) = estate(3,lidx) - npenum;
end
temp = equPop(lidx);
else
% naik
Naik(lidx);
end
end
if (eantnaik(1,lidx) == 0 && eantturun(1,lidx) == 0)
% jika eantnaik kosong dan eantturun kosong, change state ke idle
estate(1,lidx) = 0;
elseif (eantnaik(1,lidx) == 0 && eantturun(1,lidx) > 0)
% jika eantnaik kosong, eantturun berisi, change state ke turun
estate(1,lidx) = 2;
end
end
function Turun1(lidx)
if (estate(4,lidx) == 1)
estate(4,lidx) = 0;
estate(3,lidx) = estate(3,lidx) + npenum;
else
if (eantturun(1,lidx) == estate(2,lidx))
% berhenti, buka pintu, orang turun
estate(4,lidx) = 1;
if (estate(3,lidx) > 0)
estate(3,lidx) = estate(3,lidx) - npenum;
end
temp = eqdPop(lidx);
else
% turun
Turun(lidx);
end
end
if (eantturun(1,lidx) == 0 && eantnaik(1,lidx) == 0)
% jika eantturun kosong dan eantnaik kosong, change state ke idle
estate(1,lidx) = 0;
elseif (eantturun(1,lidx) == 0 && eantnaik(1,lidx) > 0)
% jika eantturun kosong, eantnaik berisi, change state ke naik
estate(1,lidx) = 1;
end
end
function Idle(lidx)
% satu eksekusi pada state idle
if (estate(4,lidx) == 1 && etunggu(1,lidx) == 0)
% masukkan orang, tutup pintu
estate(4,lidx) = 0;
estate(3,lidx) = estate(3,lidx) + npenum;
elseif (estate(4,lidx) == 1 && etunggu(1,lidx) == 1)
% tunggu orang masuk
etunggu(1,lidx) = 0;
end
if (eantnaik(1,lidx) > 0)
% change state -> naik
estate(1,lidx) = 1;
Naik1(lidx);
elseif (eantturun(1,lidx) > 0)
% change state -> turun
estate(1,lidx) = 2;
Turun1(lidx);
end
end
function JalankanLift()
% satu eksekusi semua lift
for i=1:4
if (estate(1,i) == 0)
Idle(i);
elseif (estate(1,i) == 1)
Naik1(i);
elseif (estate(1,i) == 2)
Turun1(i);
end
end
end
if (found == 0)
eantnaik(i,lidx) = x;
end
equSortAscending(lidx);
end
function x = equPop(lidx)
if (eantnaik(1,lidx) > 0)
x = eantnaik(1,lidx);
end
i = 1;
while(eantnaik(i,lidx) > 0)
eantnaik(i,lidx) = eantnaik(i+1,lidx);
i = i+1;
end
end
function equSortDescending(lidx)
% menghitung jumlah efektif antrian :
nq = 0;
for i=1:20
if (eantnaik(i,lidx) > 0)
nq = nq+1;
end
end
rAn = nq;
iAn = 0;
% rAn: remaining antrian
% nq: n eff antrian
% iterasi pengurutan :
while (rAn > 1)
rAn = rAn - 1;
iAn = iAn + 1;
idxmax = equGetIdxMax(lidx,iAn);
if (iAn == idxmax)
else
temp = eantnaik(idxmax,lidx);
eantnaik(idxmax,lidx) = eantnaik(iAn,lidx);
eantnaik(iAn,lidx) = temp;
end
end
end
function equSortAscending(lidx)
temp = eantnaik(idxmin,lidx);
eantnaik(idxmin,lidx) = eantnaik(iAn,lidx);
eantnaik(iAn,lidx) = temp;
end
end
end
function rentang = equGetIdxMax(lidx, startidx)
max = eantnaik(startidx,lidx);
rentang = startidx;
for i=startidx:20
if (eantnaik(i,lidx) > max)
max = eantnaik(i,lidx);
rentang = i;
end
end
end
function rentang = equGetIdxMin(lidx, startidx)
min = eantnaik(startidx,lidx);
rentang = startidx;
for i=startidx:20
if (eantnaik(i,lidx) < min && eantnaik(i,lidx) > 0)
min = eantnaik(i,lidx);
rentang = i;
end
end
end
if (found == 0)
eantturun(i,lidx) = x;
end
eNaikSortDescending(lidx);
end
function x = eqdPop(lidx)
if (eantturun(1,lidx) > 0)
x = eantturun(1,lidx);
end
i = 1;
while(eantturun(i,lidx) > 0)
eantturun(i,lidx) = eantturun(i+1,lidx);
i = i+1;
end
end
function eNaikSortDescending(lidx)
% Jumlah efektif antrian :
nq = 0;
for i=1:20
if (eantturun(i,lidx) > 0)
nq = nq+1;
end
end
rAn = nq;
iAn = 0;
% rAn: remaining antrian
% nq: n eff antrian
% iterasi pengurutan :
while (rAn > 1)
rAn = rAn - 1;
iAn = iAn + 1;
idxmax = eNaikGetIdxMax(lidx,iAn);
if (iAn == idxmax)
else
% menukar max dengan head
temp = eantturun(idxmax,lidx);
eantturun(idxmax,lidx) = eantturun(iAn,lidx);
eantturun(iAn,lidx) = temp;
end
end
end
function eTurunSortAscending(lidx)
% menghitung jumlah efektif antrian :
nq = 0;
for i=1:20
if (eantturun(i,lidx) > 0)
nq = nq+1;
end
end
rAn = nq;
iAn = 0;
% rAn: remaining antrian
% nq: n eff antrian
% iterasi pengurutan :
while (rAn > 1)
rAn = rAn - 1;
iAn = iAn + 1;
idxmin = eTurunGetIdxMin(lidx,iAn);
if (iAn == idxmin)
else
temp = eantturun(idxmin,lidx);
eantturun(idxmin,lidx) = eantturun(iAn,lidx);
eantturun(iAn,lidx) = temp;
end
end
end
function rentang = eNaikGetIdxMax(lidx, startidx)
max = eantturun(startidx,lidx);
rentang = startidx;
for i=startidx:20
if (eantturun(i,lidx) > max)
max = eantturun(i,lidx);
rentang = i;
end
end
end
function rentang = eTurunGetIdxMin(lidx, startidx)
min = eantturun(startidx,lidx);
rentang = startidx;
for i=startidx:20
if (eantturun(i,lidx) < min && eantturun(i,lidx) > 0)
min = eantturun(i,lidx);
rentang = i;
end
end
end
% debugging functions
function Showequ()
disp('EQU =');
disp(eantnaik);
disp('estate(2,i) =');
disp(estate(2,:));
end
function Showeqd()
disp('EQD =');
disp(eantturun);
disp('estate(2,:) =');
disp(estate(2,:));
end
function Showelev()
disp('E =');
disp(elift);
disp('estate(2,:) =');
disp(estate(2,:));
end
% Strategical methods
function lidx = TentukanLift (rf, ud)
% rf = lantai tujuan
% ud = naik atau turun (1 = naik, 2 = turun)
g = zeros(1,4);
for j=1:4
if (estate(1,j) == ud && estate(1,j) > 0)
% jika request u/d sama dengan state, tidak sama dgn nol
g(1,j) = Jarak(rf,estate(2,j));
elseif(estate(1,j) == 0)
% jika state idle
g(1,j) = Jarak(rf,estate(2,j));
else
% jika request u/d berbeda dengan state
fd = GetFinalDest(j,estate(1,j));
g1 = Jarak(rf,fd);
g2 = Jarak(fd,estate(2,j));
g(1,j) = g1 + g2;
end
end
min = g(1,1);
lidx = 1;
for i=2:4
if (g(1,i) < min)
min = g(1,i);
lidx = i;
end
end
end
%% Permintaan
%% Functions Debug
c = 0;
add = (20/4);
for k=1:4
c = c + 0;
NaikN(k,c);
end
% NaikN(1,20);
% melakukan request naik di semua lantai
% for i=1:20
% PNaik(i);
% PTurun(i);
% end
%% Graphics & UI
% create figure
figure('units','normalized',...
'Position',[.2 .1 .6 .8],...
'color',[1 1 1],...
'menubar','none',...
'numbertitle','off',...
'name','Simulation of Efficient Elevator')
%% Penomoran Lantai
uicontrol('Style','text',...
'String','Lantai 1',...
'units','normalized',...
'Position',[.25 .045 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 2',...
'units','normalized',...
'Position',[.25 .09 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 3',...
'units','normalized',...
'Position',[.25 .135 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 4',...
'units','normalized',...
'Position',[.25 .18 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 5',...
'units','normalized',...
'Position',[.25 .225 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 6',...
'units','normalized',...
'Position',[.25 .27 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 7',...
'units','normalized',...
'Position',[.25 .315 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 8',...
'units','normalized',...
'Position',[.25 .36 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 9',...
'units','normalized',...
'Position',[.25 .405 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 10',...
'units','normalized',...
'Position',[.25 .445 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 11',...
'units','normalized',...
'Position',[.25 .49 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 12',...
'units','normalized',...
'Position',[.25 .535 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 13',...
'units','normalized',...
'Position',[.25 .58 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 14',...
'units','normalized',...
'Position',[.25 .625 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 15',...
'units','normalized',...
'Position',[.25 .67 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 16',...
'units','normalized',...
'Position',[.25 .715 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 17',...
'units','normalized',...
'Position',[.25 .76 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 18',...
'units','normalized',...
'Position',[.25 .805 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 19',...
'units','normalized',...
'Position',[.25 .85 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 20',...
'units','normalized',...
'Position',[.25 .895 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
% IN_REQUEST
% labels
uicontrol('Style','text',...
'String','Tombol dlm Lift',...
'units','normalized',...
'Position',[.76 .3 .21 .04],...
'fonts',14,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','courier',...
'fontweight','bold');
uicontrol('Style','text',...
'String',' Lift :',...
'units','normalized',...
'Position',[.76 .245 .075 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','calibri');
uicontrol('Style','text',...
'String','Lantai',...
'units','normalized',...
'Position',[.76 .195 .075 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','calibri');
% buttons
uicontrol('Style','pushbutton',...
'String','jalan',...
'units','normalized',...
'Position',[.91 .2 .07 .09],...
'Callback',@doinreq);
% editboxes
e_inreq=uicontrol('style','edit',...
'units','normalized',...
'position',[.84 .25 .06 .04],...
'backgroundcolor',[1 1 1],...
'fontweight','bold',...
'fonts',11);
e_inreq1 = uicontrol('style','edit',...
'units','normalized',...
'position',[.84 .2 .06 .04],...
'backgroundcolor',[1 1 1],...
'fontweight','bold',...
'fonts',11);
%% OUT_REQUEST
% labels
uicontrol('Style','text',...
'String','Tombol luar Lift',...
'units','normalized',...
'Position',[.565 .695 .23 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','courier',...
'fontweight','bold');
uicontrol('Style','text',...
'String','SIMULASI 4 LIFT',...
'units','normalized',...
'Position',[.02 .895 .23 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','courier',...
'fontweight','bold');
uicontrol('Style','text',...
'String','I Gede SuryanA S',...
'units','normalized',...
'Position',[.765 .895 .23 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','courier',...
'fontweight','bold');
uicontrol('Style','text',...
'String','13207191',...
'units','normalized',...
'Position',[.840 .865 .23 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','courier',...
'fontweight','bold');
%% UP request
function dooutrequp1(varargin)
PNaik(1);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp2(varargin)
PNaik(2);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp3(varargin)
PNaik(3);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp4(varargin)
PNaik(4);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp5(varargin)
PNaik(5);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp6(varargin)
PNaik(6);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp7(varargin)
PNaik(7);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp8(varargin)
PNaik(8);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp9(varargin)
PNaik(9);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp10(varargin)
PNaik(10);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp11(varargin)
PNaik(11);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp12(varargin)
PNaik(12);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp13(varargin)
PNaik(13);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp14(varargin)
PNaik(14);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp15(varargin)
PNaik(15);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp16(varargin)
PNaik(16);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp17(varargin)
PNaik(17);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp18(varargin)
PNaik(18);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp19(varargin)
PNaik(19);
if (lanjut == false)
dolanjutkan();
end
end
%% DOWN request
function dooutreqdown2(varargin)
PTurun(2);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown3(varargin)
PTurun(3);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown4(varargin)
PTurun(4);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown5(varargin)
PTurun(5);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown6(varargin)
PTurun(6);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown7(varargin)
PTurun(7);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown8(varargin)
PTurun(8);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown9(varargin)
PTurun(9);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown10(varargin)
PTurun(10);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown11(varargin)
PTurun(11);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown12(varargin)
PTurun(12);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown13(varargin)
PTurun(13);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown14(varargin)
PTurun(14);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown15(varargin)
PTurun(15);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown16(varargin)
PTurun(16);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown17(varargin)
PTurun(17);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown18(varargin)
PTurun(18);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown19(varargin)
PTurun(19);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown20(varargin)
PTurun(20);
if (lanjut == false)
dolanjutkan();
end
end
%% UP buttons
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .045 .03 .045],...
'Callback',@dooutrequp1);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .09 .03 .045],...
'Callback',@dooutrequp2);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .135 .03 .045],...
'Callback',@dooutrequp3);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .18 .03 .045],...
'Callback',@dooutrequp4);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .225 .03 .045],...
'Callback',@dooutrequp5);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .27 .03 .045],...
'Callback',@dooutrequp6);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .315 .03 .045],...
'Callback',@dooutrequp7);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .36 .03 .045],...
'Callback',@dooutrequp8);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .405 .03 .045],...
'Callback',@dooutrequp9);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .45 .03 .045],...
'Callback',@dooutrequp10);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .495 .03 .045],...
'Callback',@dooutrequp11);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .54 .03 .045],...
'Callback',@dooutrequp12);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .585 .03 .045],...
'Callback',@dooutrequp13);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .63 .03 .045],...
'Callback',@dooutrequp14);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .675 .03 .045],...
'Callback',@dooutrequp15);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .72 .03 .045],...
'Callback',@dooutrequp16);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .765 .03 .045],...
'Callback',@dooutrequp17);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .81 .03 .045],...
'Callback',@dooutrequp18);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .855 .03 .045],...
'Callback',@dooutrequp19);
%% tombol Turun
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .09 .03 .045],...
'Callback',@dooutreqdown2);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .135 .03 .045],...
'Callback',@dooutreqdown3);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .18 .03 .045],...
'Callback',@dooutreqdown4);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .225 .03 .045],...
'Callback',@dooutreqdown5);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .27 .03 .045],...
'Callback',@dooutreqdown6);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .315 .03 .045],...
'Callback',@dooutreqdown7);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .36 .03 .045],...
'Callback',@dooutreqdown8);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .405 .03 .045],...
'Callback',@dooutreqdown9);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .45 .03 .045],...
'Callback',@dooutreqdown10);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .495 .03 .045],...
'Callback',@dooutreqdown11);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .54 .03 .045],...
'Callback',@dooutreqdown12);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .585 .03 .045],...
'Callback',@dooutreqdown13);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .63 .03 .045],...
'Callback',@dooutreqdown14);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .675 .03 .045],...
'Callback',@dooutreqdown15);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .72 .03 .045],...
'Callback',@dooutreqdown16);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .765 .03 .045],...
'Callback',@dooutreqdown17);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .81 .03 .045],...
'Callback',@dooutreqdown18);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .855 .03 .045],...
'Callback',@dooutreqdown19);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .9 .03 .045],...
'Callback',@dooutreqdown20);
uicontrol('Style','pushbutton',...
'units','normalized',...
'String','Perkecil',...
'Position',[.91 .09 .07 .045],...
'Callback','if camva >= 179;return;else;camva(camva+1);end');
%% Button clicks
end
%% System Drawing
% menggambarkan lift ke axes
ver= [0 0 0;
1 0 0;
1 1 0;
0 1 0;
0 0 1;
1 0 1;
1 1 1;
0 1 1];
face= [1 2 6 5;
2 3 7 6;
3 4 8 7;
4 1 5 8;
1 2 3 4;
5 6 7 8];
% create axes
axes('position',[.15 .1 .5 .8],'color',[1 1 1])
% variasi tampilan
% axis square % #1 normal view, keep aspect ratio
axis vis3d % #2 realistic view
grid on % hide/show grid
axis off % hide axis
% variables
sbox = ver;
function DrawAllBoxes()
cla;
for i=1:4
sbox = ver;
sbox(:,1) = sbox(:,1) + i -1;
for j=1:20
sbox(:,3) = sbox(:,3) + j -1;
if(elift(j,i) == 0)
% draw empty box (soft blue)
sbox =
patch('vertices',sbox,'faces',face,'edgecolor','w','facecolor',[.5 .2 1],...
'facevertexalphadata',0.15,'facealpha','flat');
elseif (elift(j,i) == 1)
% draw the lift
if (estate(4,i) == 0)
% pintu tertutup (blue)
sbox =
patch('vertices',sbox,'faces',face,'edgecolor','w','facecolor',[1 0 0],...
'facevertexalphadata',0.3,'facealpha','flat');
elseif(estate(4,i) == 1)
% pintu terbuka (red)
sbox =
patch('vertices',sbox,'faces',face,'edgecolor','w','facecolor',[0 1 0],...
'facevertexalphadata',0.3,'facealpha','flat');
end
end
sbox = ver;
sbox(:,1) = sbox(:,1) + i -1;
end
end
end
% initial draw
DrawAllBoxes();
% setting view
view(10,20);
camva(camva-2);
dolanjutkan();
end