Các tính chất của các điều khiển trong GUIDE Matlab

April 12, 2008

Chào các bạn.

Mình xin gửi các bạn tài liệu Matlab 7 - Creating Graphical User Interfaces, là tài liệu dạng .pdf của tài liệu trong Help của Matlab. Các bạn nào có thể tự đọc hiểu được English thì tài liệu này là quá đầy đủ rồi. Các bài viết của mình dựa một phần vào tài liệu này và dựa vào kinh nghiệm khi mình lập trình.

Mình đang làm đồ án tốt nghiệp nên mỗi ngày cố gắng viết một tí cho các bạn đọc nhé. Mà đồ án của mình làm với FPGA, chỉ dùng System Generator là liên quan đến Matlab thôi :d.

Trong bài viết này, mình giới thiệu các bạn các tính chất đặc trưng của các điều khiển mà các bạn hay gặp.

Để hiện cửa sổ các tính chất Property Inspector của một điều khiển chúng ta có 3 cách sau:

  • Nhấn đúp chuột vào mỗi điều khiển.
  • Chọn điều khiển rồi vào menu View, chọn Property Inspector.
  • Chọn điều khiển rồi nhấn vào biểu tượng Property Inspector, gần chỗ M-file editor.

Khi đó, cửa sổ Property Inspector sẽ hiện ra. Khi nhấn vào các điều khiển khác thì cửa sổ này sẽ hiện thông tin tương ứng cho điều khiển đó.

Một vài tính chất chung của các điều khiển mà các bạn nên chú ý:

Tính chất (property) Giá trị (value) Miêu tả
Enable on, inactive, off
Mặc định là: on
Xác định khi nào thì điều khiển hiển thị lên giao diện.
Đặt = off, thì điều khiển sẽ không xuất hiện.
Max Vô hướng.
Mặc định là 1.
Giá trị lớn nhất, tùy thuộc vào từng điều khiển.
Min Vô hướng.
Mặc định là 0
Giá trị nhỏ nhất, tùy thuộc vào từng điều khiển.
Position Vector gồm 4 phần tử (left, bottom, width, height) Kích thước của điều khiển và vị trí tương đối của nó với điều khiển chứa nó.
String    
Units   Đơn vị đo lường dùng trong xác định vị trí.
Value Vô hướng hoặc vector Giá trị của component, tùy thuộc vào từng component.

Ngoài ra, thuộc tính cực kì quan trọng mà các bạn phải thay ngay từ đâu là: tag. Thuộc tính này giống thuộc tính Caption mà các bạn gặp trong Visual Basic, chính là tên để phân biệt giữa các điều khiển. Mỗi điều khiển chỉ có một tên duy nhất. các bạn nên qui định cho dễ nhớ nhé. Mình nghĩ là nên kết hợp giữa tên của loại điều khiển và mục đích của điều khiển đó.

Ví dụ: một ô nhập dữ liệu giá trị tiền, thuộc Edit Box nên mình đặt tag là: editMoney.

Bây giờ đi vào từng điều khiển cụ thể.

1. Push Button

Thay đổi chữ hiển thị (label) hiển thị trên điều khiển này bằng cách thay đổi thuộc tính String. Chữ hiển thị trên Button chỉ có thể là 1 dòng, nên nếu bạn gõ nhiều dòng trong thuộc tính String thì chỉ hiển thị dòng đầu tiên. Nếu số kí tự dòng đầu tiên lớn hơn bề rộng có thể hiển thị chữ được của bề mặt Button thì Matlab tự rút ngắn String đó với dấu 3 chấm (...).

Thay đổi vị trí  của PushButton = thay đổi thuộc tính Position. Có thể code trong MFile (thay đổi trong quá trình thực thi) hoặc thay đổi ngay lúc thiết kế(gắp thả).

Để thêm một ảnh vào PushButton thì chúng ta gán thuộc tính CData bằng một ma trận m x n x 3 của giá trị RGB. Thực hiện trong MFile ở hàm Open của điều khiển để ngay khi chạy chương trình đã load ảnh này vào rồi.

img = rand(16,64.3);

set(handles.pushbutton1, 'CData',img);

Chú ý: Có thể tạo biểu tượng riêng của bạn cho các nut Push Button bằng cách dùng Icon Editor, sau đó dùng hàm ind2rgb để chuyển sang ảnh gán vào thuộc tính CData.

Các sự kiện xảy ra khi nhấn Push Button được viết trong các hàm ngắt như Callback,..

2. Slider (Thanh trượt)

Thay đổi khoảng giá trị của Slider bằng cách thay đổi thuộc tính Min và Max. Tất nhiên Min < Max.

Giá trị hiện tại của Slider được = giá trị của thuộc tính Value. Nên khi set hoặc get thì ta lấy giá trị này.

Khi click vào 2 cái mũi tên 2 bên thì thanh trượt sẽ trượt tương ứng về 2 phía theo một bước nào đó. Thay đổi thuộc tính SliderStep = [min_step, max_step]. min_step là giá trị bước nhảy khi click vào 2 mũi tên. Còn Max_step là giá trị khi mà click vào trong vùng trượt.

3. Radio Button

Để biết nút Radio có được đánh dấu hay là không thì chúng ta xem thuộc tính Value của nó.

Value = 1 thì check

Value = 0 thì là k check

4. Check Box

Check Box thì thuộc tính quan trọng cũng tương tự như Radio Button.

5. Edit Text

Thuộc tính quan trọng là Stri
ng, chính là xâu kí tự hiển thị trên Edit Text. Chú ý: để hiển thị như ý muốn thì các bạn cần phải xem kĩ thêm các hàm xử lý string nhé.

Để hiển thị Edit Text dạng Multi-line thì cần thay đổi thuộc tính Max, Min. Max> Min. Ví dụ: Max = 2, Min = 0 sẽ hiển thị 2 dòng đó.

6. Static Text

Thằng này tương tự như Edit Text.

7. Popup Menu

8. List Box

9. Toggle Button

Hic hic, viết dài quá mỏi tay hật. Rảnh rỗi viết cập nhật thêm vài cái, còn không thì các bạn thực hành trong các bài khác nhé Big Grin

Các bài viết liên quan:

  1. Lập trình C cho vi điều khiển Mình tham gia các diễn đàn từ lâu lắm rồi và cũng giải đáp nhiều thắc mắc về lập trình C cho các vi điều khiển thông dụng như 8051, PIC. Mình viết bài này để giải đáp thắc mắc cho các bạn mới bước vào học lập trình cho vi điều khiển dùng ngôn [...]...
  2. Lập trình giao diện GUI trong Matlab (Phần 1) Mình viết bài này để tổng hợp lại các hướng dẫn về thiết kế giao diện GUI trong Matlab để các bạn dễ dàng thực hiện. Phần mềm: Matlab R2007a Bài đầu tiên mình sẽ giới thiệu các bạn giao diện GUI. 1. Mở phần mềm Matlab, gõ lệnh sau vào cửa sổ Command >> [...]...
  3. So sánh các bộ điều khiển tốc độ động cơ DC Trong bài này, tác giả muốn so sánh bộ điều khiển PID truyền thống và bộ điều khiển Robust Feedforward (thực tế không phải là Feedforward, mà là cải tiến của tác giả) trong quá trình tác giả và bạn của tác giả (Bá Hải) cùng nghiên cứu tại BioRobotics Lab Các bộ điều khiển [...]...
  4. Hướng dẫn tự học vi điều khiển 32 bit TMS320F28335 của TI Rất lâu rồi mình không viết Blog, mà chỉ thỉnh thoảng trả lời comment của các bạn, còn chủ yếu mình dùng Facebook cá nhân, cũng vì nhiều nguyên nhân. Cũng không có cảm hứng viết blog, nên giờ mới dành thời gian viết tiếp. TMS320F28335 là một loại vi điều khiển thuộc loại mạnh [...]...
  5. Lập trình C cho vi điều khiển: vấn đề khai báo biến Chào các bạn. Như các bạn đã biết trong các lệnh ASM của vi xử lý thì thao tác với các toán tử là các thanh ghi sẽ tốn ít thời gian nhất và do đó tối ưu được chương trình chạy rất nhanh, thời gian thực hiện từng thuật toán sẽ giảm đi nhiều. [...]...
  6. PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART Chào các bạn. Nay ngồi code cho con PIC16F887 để điều khiển đèn halogen, thực ra chính là điều khiển một chân rồi qua TIP122 và relay để điều khiển đèn thôi (vì dòng tải lên tới 10A). Mình thấy cách viết hay nên chia sẻ với các bạn. Dùng để lưu trữ luôn. Để [...]...

{ 35 comments… read them below or add one }

kem May 9, 2008 at 10:34 am

Bạn admin ơi,bạn post bài nói về cách tạo hộp thoại mở file đi.Chẳng hạn như ấn vào nút open thì sẽ cho ra hộp thoại chọn file để mở ấy.

Reply

thien toan December 5, 2008 at 9:38 am

chào anh. hiện nay em đang làm phần GUI cho đồ án môn học.
em đang muốn mở 1 cửa sổ khác trong GUI. giống nhu là khi install sòt đó anh, nhung em 0 biết viết code cho phần đó thế nào
anh giúp em nhé
cám ơn anh

Reply

ngohaibac December 5, 2008 at 9:47 am

Nếu bạn muốn mở cái GUI khác thì gọi tên của fig mới ra thôi, còn ẩn GUI cũ đi thì bạn xem cái nút OK và Cancel nó viết thế nào thì viết tượng tự vậy.

Chúc bạn thành công.

Reply

thien toan December 6, 2008 at 11:25 am

cám ơn anh. h em đã làm được.
h em có khó khăn khác. em muốn truyền dữ liệu giữa các GUI với nhau. vd cụ thể là GUI1 em nhập tần số sóng mang và dạng điều chế rùi bấm Next. em dựa vào thông số chọn lựa của dạng điều chế mà mở ra GUI2 điều chế theo dạng cho trước. ở GUI2 nhập thông số tín hiệu và dạng đồ thi muốn vẽ, rùi bấm Next. GUI3 sẽ vẽ theo chọn lựa dạng đồ thị của GUI2 và sóng mang của GUI1. em làm thế nào đây ạ

Reply

ngohaibac December 6, 2008 at 2:51 pm

Chào em.

Cái này thì dễ mà, bởi vì trước khi em nhấn nút thì dữ liệu đã được nhập rồi, nên sẽ lấy làm tham số đầu vào cho cái GUI thứ 2 thôi.

Em chú ý cái biến varargin nhé :D .

Chúc em thành công.

Reply

quang December 27, 2010 at 4:32 pm

anh ơi giải giùm em bài chạy chữ trong guide matlab với e đã làm mấy tuần nay rồi mà không được bài này ngày 29/12 là em phải nộp cho thầy rồi mong anh giúp e .
đây la mail của e invisibleman.nguyen@gmail.com
Mong anh giup cho cảm ơn anh trước nha

Reply

thien toan December 7, 2008 at 7:34 am

em đọc help của varargin rồi nhưg 0 hiểu lắm. em đang tính dùng inputdlg, anh hướng dẫn em 1 tí nhá :roll:

Reply

ngohaibac December 7, 2008 at 7:00 pm

Chào em.

varargin là tất cả các đầu vào khi một form khác hay là khi gọi từ dòng lệnh thôi. Cái này rất đơn giản. Em xem ví dụ, gọi cái form OK, Cancel đó, nó cũng gọi form này và thêm các thông số như tiêu đề, … cho nó mà.

Chúc em thành công.

Reply

thien toan December 8, 2008 at 11:09 am

em làm được rồi. cám ơn anh nhìu.
trong bài báo cáo em tính làm thêm 1 tí về định nghĩa handles, vì nó khá là quan trọng trong GUI và cả Matlab, nhưng em vẫn chưa rõ lắm.
em hình dung nó như 1 pointer để chỉ đến các biến, giúp cho việc gọi hàm nhanh hơn. đúng 0 ạ?
giá trị của các handles trong các lần test em thấy cũng thay đổi hết luôn, vậy làm sao xác định được giá trị handles đây anh
vd như em đặt

x= varargin

handles.open = varargin{2} (em hỉu là lấy thành phần thứ 2 trong varargin đưa vào handles.open)

thì trong Matlab xuất ra:
x =

‘OpenNewGUI’ [183.0023]

handles =

figure1: 189.0022
biendo2: 15.0039
tanso2: 14.0039
text2: 13.0039
text1: 12.0045
ok: 190.0022
open: 183.0023

anh giải thích giúp em nhé. cám ơn anh

Reply

ngohaibac December 8, 2008 at 11:38 am

Chào em.

Gần đúng rồi đó em. Khá giỏi đó. Như anh đã nói ở rất nhiều bài viết về cấu trúc handles rồi.

handles là một structures, không phải là một con trỏ (pointer) em nhé. Em có thể search handles trong Help Matlab để có cái nhìn rõ hơn về vấn đề này.

Chúc em thành công.

Reply

VU VAN HIEP February 27, 2009 at 4:01 pm

Chao anh!
em doc kha nhieu bai viet cua anh,e thay no that bo ich.
gio day e dang lam mot de tai nghien cuu ve GUI_matlab nhung em dang ket mot chut la em khong biet truyen du lieu tu mot edittext vao cho listbox the nao?em muon sau moi lan nhap du lieu tu edittext thi gia tri do nhay xuong o listbox.o trong visualbasic thi e da lam dc con trong matlab thi em k mo duoc.Anh giup em voi.Cam on anh nhieu!

Reply

LANH April 1, 2009 at 9:31 am

MÌNH DANG LÀM 1 MÁY TÍNH CÁ NHÂN VỚI CÁC NÚT TỪ 1 TỚI 9 VÀ NÚT CONG TRỪ NHÂN CHIA. MINH KHÔNG BIẾT LÀM SAO ĐỂ EDITTEXT HIỆN SỐ CÓ HAI CHỮ SỐ KHI MÌNH NHẬP TỪ CÁC NÚT TRÊN VÍ DỤ 11,12, 11119. CÓ BẠN NÀO BIẾT CHỈ GIÙM MÌNH VÓI CÁM ON NHIÊU!!!!

Reply

kendmantico June 1, 2009 at 11:14 pm

admin chỉ giáo với!
làm sao gọi ẩn từ hàm này , roỳ dùng sang hàm khác .
làm sao nhận biết bao nhiu lần nhấn button đc !!!!
plzzz !

Reply

ngohaibac June 2, 2009 at 7:54 am

Em lưu biến vào trong cấu trúc handles, cái này a nói nhiều lần rồi, em đọc lại các bài viết mà anh viết đi nhé. Số lần nhấn nút thì cũng ghi vào 1 trường trong cấu trúc Handles là được mà.

Chúc em thành công.

Reply

kendmantico June 3, 2009 at 11:43 pm

Anh ngohaibac ơi , anh giúp em hiện 2 chữ số khi nhấn button được không anh , em làm hoài ko ra . hic

Reply

ngohaibac June 5, 2009 at 9:16 am

Chào em.

Cái này đơn giản mà em, em viết mã trong hàm callback của button đó và dùng cấu trúc set(handles.edit_text,’String’,’23′); kiểu đó là được mà.

Chúc em thành công.

Reply

Kieu Oanh December 18, 2009 at 11:16 pm

Anh Hải Bắc giúp Em với.Hiện Em đang tìm bài tập lớn về FFT nhưng khó quá.Anh có thể gíp em được không?Nếu có một chương trình ứng dụng của thuật toán này thì càng tốt.Hay Anh có trang web nào có thể tham khảo thì chỉ dùm Em mới.Cảm ơn Anh nhiều nhiều!

Reply

ngohaibac December 19, 2009 at 8:43 am

Chào em.

Em search Google với từ khóa: FFT example và thêm từ khóa của ứng dụng muốn lấy example như Matlab hoặc C++ chẳng hạn.

Một ví dụ

Chúc em thành công.

Reply

Kieu Oanh December 21, 2009 at 3:44 pm

Em Cảm ơn Anh nhiều nha!Đã chỉ dẫn cho Em.Có gì khó khăn Em sẽ hỏi Anh tiếp được không ạ?Hihi.Ah mà cái ví dụ Anh gửi cho Em bị gãy liên kết nên Em không xem được .Nếu được mong Anh gửi lại dùm Em nhé.Chào Anh

Reply

luong dang hung May 12, 2010 at 8:28 pm

anh ơi cho em hỏi chút xíu đc ko ạ???
em đang làm bài tập lớn dktd mà bị bí phần lập trình guide?
phần đó là sử dụng guide xây dựng giao diện cho bài toán khi nhập hệ số k và Ti của bộ điều khiển PI hiển thị dạng sóng đồ thị đầu ra?
mong anh chỉ dẫn cho đc ko ạ?

Reply

ngohaibac May 14, 2010 at 8:19 am

Em xem tại liên kết này nhé.

Reply

luongdanghung May 15, 2010 at 1:47 pm

chết!! em đã dùng thử nhưng khi bấm vào bộ PIDsystem.fig nó lại bị mất mấy nút ấy!!
không bít là matlab của em bị lỗi hay sao ấy;
thế cho em hỏi bộ đk PI thì cũng làm tương tự đúng không anh???
bộ điều khiển này chỉ có 2 thông số la Kp và Ti thôi!!
em cũng không bít thế nào nữa
mong anh giúp em
em cảm ơn nhiều

Reply

luong dang hung May 17, 2010 at 10:40 am

anh bắc ơi cho em hỏi thêm chút nữa ko ạ??
phần nhập Kp;Ti vào hiển thị dạng sóng tín hiệu ra ấy
sao em set xong chưa tắt đi bấm vào chạy thì vẽ đc mà khi em tắt hết đi nó cứ báo lỗi
ko bít bị làm sao ấy
mong anh chỉ giùm đc ko ạ??
lỗi cứ như thế này ấy ạ
“”Error in ==> giaodienbaitoan>cmdplot_Callback at 90
Kp=str2double(get(handles.Kp,’String’));

Error in ==> gui_mainfcn at 75
feval(varargin{:});

Error in ==> giaodienbaitoan at 44
gui_mainfcn(gui_State, varargin{:});

??? Error while evaluating uicontrol Callback.”"

Reply

ngohaibac May 19, 2010 at 11:54 pm

Em cho hết đoạn code lên a xem nào.

Reply

luong dang hung May 21, 2010 at 12:07 pm

hì.em bít rùi anh ạ??ko phải bị lỗi mà em ko bít cách mở chương trình guide ý!!phải mở file .m chư ko phải file .fig đúng ko ạ??
em cảm ơn anh nhiều ạ???

Reply

linh May 30, 2010 at 2:47 pm

chao anh !
em thay anh tra loi nhung cau hoi rat hay, em nghi anh la nguoi rat hay jup do moi nguoi, em co bai nay viet code mai ma ko ra anh jup em voi.
vd: trong hop 1 co 3 qua cam, hai qua chuoi, 4 qua quyt
trong hop thu 2 co 5 qua cam, 3 qua chuoi,7 qua buoi
em dung guide trong matlap de thiet lap mot form de khi em chon hop 1 thi no hien len tat ca cac qua hoac la khi em chon hop thu 2 thi no lai hien len. em lam mai nhung ko ra anh jup em dc ko. em cam on anh nhieu!

Reply

nguyenvietmanh October 30, 2010 at 8:16 am

em chao anh Hai Bac!
em co mot cau ve matlab nhung ma kho qua em tim nhieu tai lieu roi ma gio dang roi day.anh chi gium em voi nhe.em dang roi trong cach viet chuong trinh cho nut radio button trong guide ay,em tim nhieu tai lieu ma thay ho it noi ve cai nay qua.anh noi ro cho em biet duoc khong.va neu co the anh chi ro vi du cho em la lap trinh 1 giao dien matlab ma co nhieu nut radio button de chon,nhu la nhap vao 2 so a va b,1 nut radio de tinh tich cua 2 so do.1 nut khac la de tinh tong.bai tap cua em tuong tu nhu vay thoi.anh giup em voi nhe.
em cam on anh nhieu.

Reply

nguyenvietmanh October 30, 2010 at 8:18 am

mail cua em la nvm08d6@gmail.com .sdt 0935039234.anh giup em voi anh nhe!

Reply

khanh June 20, 2010 at 9:36 pm

cho em xin mấy cái lệnh vẽ đồ thị 3d với ?em có mấy cái nhưng xấu quá.cám ơn nhiều

Reply

cong thanh November 10, 2010 at 5:39 pm

anh admin oi!em dg lam viet giao dien matlab tinh he pt Ax=b,A la ma tran,b la vecto cot,nhung em hok bit ham de nhap ma tran va vecto vao,anh jup em voi!huhu

Reply

thanhtruc May 31, 2011 at 4:11 pm

co ai biet ngat timer su dung nhu the nao khong? tai do minh mu tit tieng anh nen doc HELP TIMER ma khong hieu

Reply

cuong September 13, 2011 at 2:40 pm

Các bạn ơi giúp mình 1 vấn đề với: bài toán của mình gồm có các giai đoạn khác nhau, nhập dữ liệu đầu vào cho giai đoạn đầu tiên,kết quả của giai đoạn đầu sẽ là thông số của giai đoạn sau,cứ tiếp tục cho đến hết. Mình đã làm được cái đó rồi,nhưng điều quan trọng la bjo mình ko biết vẽ đồ thị,tức là cái đồ thị này được dựng lên nhờ kết quả lấy được từ các giai đoạn trên.Ví dụ như cái đồ thị thời gian và tốc độ qua từng giai đoạn làm sao khi nó hiển thị ra phải là 1 đường cong trơn. Bạn nào có mẹo nào giúp mình chỗ đó với.làm ơn pm qua yah:cuongnguyentb0489@yahoo.com cho mình nhé,cảm ơn các bạn nhiều.

Reply

admin May 9, 2008 at 12:55 pm

Chào bạn.

Mình đang bận làm đồ án nên vấn đề này mình giải quyết sau nhé. Chắc chắn là làm được mà.

Chúc bạn thành công.

Reply

dtvt-k49 May 26, 2008 at 6:56 pm

sao em khong save duoc cac bai trong trang web cua anh huhuhu. lan nao cung den 99% roi bao loi

Reply

admin May 26, 2008 at 7:13 pm

Anh cũng không biết nữa vì anh cũng không save vào bao giờ cả :mrgreen: .

Em thử print ra file .pdf xem có được không.

Chúc em thành công.

Reply

Leave a Comment

Previous post:

Next post: