| POČETNA STRANICA | SURADNICI | PROJEKTI | NASTAVA |
 
Vježba 7: Kreiranje interaktivnih programa u Matlabu.




Jedna od najvećih mana dosadašnjih programa napisanih u matlabu je njihova neinteraktivnost. Korisnik mora poznavati programe, odnosno mora znati na koji je način programer zamislio da se koriste programi, sa kojim ulazima i značenje izlaza, da bi ih mogao koristiti. Npr, ako smo napravili funkciju koja transformira katerzijeve koordinate u polarne, korisnik mora znati da li su argumenti funkcije dva skalara koja predstavljaju koordinate u katerzijevom koordinantnom sustavu. U tom slučaju poziv funkcije će izgledati :
>> polar(2,3)
ili matrica od dva elementa. U tom slučaju poziv funkcije će izgledati
>> polar([2 3])
Naredbe input i disp
Korak naprijed je korištenje naredbi input i disp u programima.
Naredba input ispisuje na ekranu tekst koji korisnika upućije što mu je raditi i vraća podatak koji je korisnik utipkao.
primjer:

% m- file odabir.m

r=input('odaberite \n a \n b ili \n c \n');
if r=='a'
disp('odabrali ste a');
elseif r=='b'
disp('odabrali ste b');
elseif r=='c'
disp('odabrali ste c');
else
disp('krivi odabir');
end


ispis rezultata:

>> odabir
odaberite
a
b ili
c
'b'
odabrali ste b
>>
Grafičko sučelje
Suvremena grafička korisnička sučelja (Graphical User Interface - GUI) omogućuju korisnicima odabir naredbi pomocu različitih kontrola poput gumbova (buttons), polja za unos teksta (text fields), klizača (sliders), i izbornika (menus). Kontrole je potrebno dizajnirati na način da je korisniku jasno koja će akcija sljediti iz jegovog odabira. Kreiranje grafičkog sučelja u Matlabu odvija se u tri koraka:

1. dizajniranje grafičkog suelja dodavanjem i razmještajem kontrola
2. programiranje kontrola da rade nešto
3. pokretanje grafičkog sučelja.

Dizajniranje grafičkog sučelja:
matlab 5
Odabirom "Show GUI Layout Tool" iz File izbornika Matlaba ili utipkavanjem naredbe "guide" pokreće se alat za dizajniranje grafičkog sučelja izgleda kao na slici:



Klikom na gumb "Add figure" stvara se nova, prazna slika na kojoj dizajnitramo grafičko sučelje.


Koristeći paletu za odabir kontrola dodajemo kontrole na sliku koja predstavlja grafičko sučelje.


matlab 6.5 i 7
Odabere se opcija new -> GUI iz File izbornika ili se u komandni prozor upiše naredba "guide"

odabere se opcija Blank Gui



Koristeći paletu za odabir kontrola dodajemo kontrole na sliku koja predstavlja grafičko sučelje.


Kontrole za ulaz/izlaz

Push Buttons


Izvršavaju Callback akciju kada se pritisnu, npr OK gumb zatvara prozor za dialog i primjenjuje svojstva.
Callback je procedura (skripta) koja se poziva kada se aktivira objekt kontrole. Svaka kontrola ima callback svojstvo koje postavimo na ime procedure ili m-filea. Callback se izvršava se u radnom prostoru matlaba.

Ikona za dodavanje push buttona u matlabu 7 :
Check Boxes
Check 1

Mjenjaju stanje kada se kliknu. Kada su označeni vrijednost 'Value' svojstva je 1, odnosno 0 ako nisu označeni.
Ikona za dodavanje check boxa u matlabu 7 :
Radio Buttons
Radio 1
Radio 2

Slični su kao check boxes, ali zamišljeni su da se koriste u povezanim grupama na način da se može odabrati samo jedna od ponuđenih opcija.

Ikona za dodavanje radio buttona u matlabu 7 :
Edit Text


Koriste se kada želimo dopustiti korisniku da upisuje ili mijenja tekst. Prilikom kreiranja postavljamo svojstvo 'Tag' putem kojeg mu pristupamo. Svojstvo 'String' sadrži tekst koji je korisnik upisao.

Ikona za dodavanje edit texta u matlabu 7 :
Static Text
Ispisuje linije teksta.Obično se koristi za označavaje drugih kontrola. Korisnik ga ne može mijenjati. Nema Callback rutinu povezanu.

Ikona za dodavanje static texta u matlabu 7 :
Sliders


Primjenjuju numeričku vrijednost između definiranog minimuma i maksimuma sa zadanim korakom koju opisuje položaj klizača. Potrebno je postaviti sljedeće svojstva:
Value - trenutna vrijednost
Max - minimalna vrijednost
Min - maksimalna vrijednost
SliderStep - osjetljivost

Frames
Okviri koje zatvaraju regije prozora. Koriste se za vizualno grupiranje kontrola. Nemaju Callback proceduru. Mogu sadržavati samo kontrole za ulaz/izlaz.

List Boxes

Prikazuju liste stavki definirane u 'String' svojstvu i omogućavaju korisniku da odabere jednu ili više. Svojstva min i max definiraju koliko stavki se može odabrati.

Popup Menus


Otvaraju listu izbora. Kada se klikne na strelicu otvaraju listu izbora i omogućavaju korisniku da odabere jedan. Kada nije otvoren prikazuje trenutno odabranu stavku. Stavke imaju indekse, prva stavka ima indeks 1. Mogu imati definiranu Callback proceduru. Može se koristiti umjesto radio buttons- a


Programiranje kontrola
Nakon dodavanja kontrola klikom na property editor postavimo svojstava kontrola.
    Callback proceduru možemo postaviti na dva načina:
  • umošenjem imena datoteke za callback svojstvo kontrole
  • upisivanjem koda procedure u prozor callback editora
Odabirom kontrole na slici grafičkog sučelja i klikom na callback editor dodajemo callback procedure.
Unutar Callback procedure često je potrebno pročitati sadržaj neke kontrole. To se postiže na način da prvo otvorimo handle na tu kontrolu. Kontroli pristupamo preko njenog 'Tag' svojstva.
handle=findobj(gcf,'Tag','Edit1')
gcf - trenutni prozor
'Tag' - odabir svojstva
'Edit1' - vrijednost Tag svojstva koju smo postavili u property editoru.
Sada korištenjem naredbi set i get možemo postavljati i čiteti vrijednosti.
x=get(handle,'String') - u varijablu x sprema tekst koji nalazi u Edit1
set(handle,'String','novi tekst') - upisuje 'novi tekst' u Edit1

primjer.

handle=findobj(gcf,'Tag','Edit1')
x=get(handle,'String')
handle2=findobj(gcf,'Tag','Edit2')
set(handle2,'String',x)
ovaj primejr kopira tekst iz Edit1 prostora u Edit2.

napomena: ukoliko iz Edit teksta želimo pročitati broj koristit ćemo funkciju str2num:
x=str2num(get(handle,'String') )

matlab 6.5

GUIDE alat nam služi prvenstveno za kreiranje izgleda sučelja programa. Međutim guide osim .fig datoteke kreira i jednu m -datoteku unutar koje se nalaze okviri za izvršavanje callback funkcija.
Dakle za svaku kontrolu koju možemo programirati stvara se zaglavlje funkcije oblika :

function objectTag_Callback(hObject, eventdata, handles)

Gdje su:
hObject -> handle na objekt čiji se callback izvršava.
eventdataEmpty -> ne koristi se
handles -> struktura koja sadrži handleve na sve objekte trenutnog sučelja. Objektima pristupami pomoću njegovog 'Tag' svojstva.
Tako ćemo handle Edit texta čije je 'Tag' svojstvo postavljeno na edit1 dobiti s handles.edit1.
želimo li pročitati broj koji je upisan u edit text polje sa 'tag' svojstvom edit1 upisati ćemo:

x=str2num(get(handles.edit1,'String'));

Zelimo li upisati broj 5 u StaticText polje cije je 'Tag' svojstvo 'text1' upisati ćemo:

set(handles.text1, 'String', num2str(5));
Pokretanje grafičkog sučelja
Grafičko sučelje prvo moramo sačuvati u obliku m -datoteke odabirom file - save as opcije. Program pokrećemo iz komandnog prozora upisivanjem imana m-datoteke.

Zadaci na vježbi:

1. Napisati interaktivni skriptni m-file koji od korisnika traži da upiše svoje ime, datum rođenja i današnji datum. Program računa koliko dana ima do korisnikovog rođendana i ispisuje poriku oblika: " Dragi ---ime--- za --broj dana-- dana je tvoj rođendan"

2. Prateći upute napraviti graičko sučelje izgleda kao na slici:



Napisati callback rutinu koja iz prvog EditTeksta čita k, iz drugog teksta čita l te ra x u rasponu 0 do 100 crta graf funkcije y=k*x+l
UPUTE:
  • Odabrati File -> new -> GUI iz izbornika Matlaba ili upisati naredbu >guide u komandnu liniju matlaba.
  • Odabrati opciju "Blank GUI"
  • Na kreiranu sliku dodati 3 Statc Text kontrole kao na slici te im promjeniti String svojstvo na natpise sa slike
  • Dodati 2 Edit text kontrole kao na slici te im promjeniti String svojstvo na 1 i Tag svojstvo na editK i editL
  • Dodati jednu Push Button kontrolu kao na slici te joj promijeniti String svojstvo na CRTAJ i Tag svojstvo na PushCrtaj
  • Dodati jednu Axis kontrolu na sliku
  • Odabirom opcije Save iz File izbornika sačuvati sliku u radni direktorij (direktorij koji se nalazi u PATH stazi matlaba) čime će se kreirati .fig datoteka i .m datoteka bezana uz grafičko sučelje
  • U kreiranij m datoteci pronaći zaglavlje callback funkcije vezane uz PushCrtaj, tj liniju u kojoj pise :

    function EditCrtaj_Callback(hObject, eventdata, handles)

  • upisati kod koji u varijablu k sprema broj upisan u editK kontroli :
    k=str2num(get(handles.editK,'String'));
  • upisati kod koji u varijablu l sprema broj upisan u editL kontolu.
  • napisati kod koji crta funkciju oblika y=k*x+l (funkcija plot) za vrijednost varijable x u području -10 do 10 sa rezolucijom 0.1
  • Sačuvati promjene napravljene u m datoteci
  • Iz komandne linije matlaba upisivanjem imena datoteke pokrenuti program.
  • Testirati ispravnost programa
  • prepisati kod callback funkcije na papir