Mình đang muốn đọc giá trị UART gửi lên từ MCU để vẽ đồ thị trên matlab. Có tham khảo code trên mạng mà nó cứ hay bị báo là cổng COM không xài được, không tìm thấy,.... Cả buổi đành phải chép từ terminal qua mà vẽ, chưa làm cái đồ thị thời gian thực được.
Không biết có bạn nào làm về cái này chưa, giúp mình với.
Em có thể dùng C# để vẽ đồ thị được mà, như hướng dẫn trong các lớp Cx của CLB
Còn muốn dùng Matlab, trước hết em phải biết cách kiểm tra cổng COM của mình trạng thái như thế nào, có thể tra "help" của matlab với keyword là "serial" hoặc xem ở:
http://www.mathworks.com/help/matlab/ref/serial.html
Từ commandline của matlab, em có thể gõ lệnh:
s1 = serial('COM1') (hay COM mấy đó tuỳ em, s1 chỉ là 1 cái biến thôi, em muốn đặt nó là cái giống gì cũng được), thì nó sẽ trả về cho em các info của cổng COM đó, chẳng hạn như sau:
Code:
Serial Port Object : Serial-COM1
Communication Settings
Port: COM1
BaudRate: 9600
Terminator: 'LF'
Communication State
Status: closed
RecordStatus: off
Read/Write State
TransferStatus: idle
BytesAvailable: 0
ValuesReceived: 0
ValuesSent: 0
Có các lệnh mở cổng, đóng cổng như (fclose, fopen,...) xem ở:
http://www.mathworks.com/help/matlab/ref/serial.fclose.html
v.v. vận dụng kĩ năng google thần thánh để tìm tiếp.
Một thông số quan trọng của COM port (có thể khác nhau với mỗi máy tính,
nên nhất định em phải kiểm tra với máy của mình), đó là
Terminator. Chẳng hạn như trong ví dụ trên, Terminator: là kí tự 'LF' (linefeed). Đây là kí tự có ý nghĩa kết thúc chuỗi data mà cổng COM nhận được.
Chính vì vậy, data từ MCU gửi lên, để nhận qua cổng COM dùng Matlab, phải kết thúc bằng kí tự 'LF' để nhận biết kết thúc chuỗi dữ liệu.
Khi dùng GUI của matlab, cái ô text mà em để hiển thị data đó, trong property em phải cho ô đó có ít nhất 2 lines (vì 'LF' tự nó đã thêm 1 line rồi, nên em để 1 line sẽ không hiển thị được kết quả).
Data nhận về, đương nhiên là kiểu string, vì thế, em phải đổi sang kiểu số, ví dụ xài str2num, str2double,...